Eine std::string
Instanz kann direkt mit einem String-Literal unter Verwendung von !=
oder ==
Operatoren verglichen werden. Dies macht Ihren Vergleich klarer.
Beachten Sie, dass \e
kein gültiges Zeichen Flucht ist, müssen Sie die \
verdoppeln, wenn Sie eine wörtliche \\
gemeint.
while(cmd == "exit" && cmd == "\\exit")
Offensichtlich cmd
nicht auf zwei verschiedenen Saiten zugleich gleich sein kann, vermutlich gemeint Sie !=
.
Überlegen Sie auch, ob std::getline(std::cin, cmd)
geeigneter ist als std::cin >> cmd;
. In beiden Fällen sollten Sie nach dem Erfolg der Leseoperation suchen, andernfalls können Sie in einer Endlosschleife enden, wenn der Stream geschlossen wird oder in einen Fehlerzustand eintritt.
Persönlich würde ich mit so etwas gehen, unter der Annahme, dass Sie den Befehl beenden möchten, wie Ihr Code tut.
#include <string>
#include <iostream>
#include <ostream>
int main()
{
std::string cmd;
while (std::getline(std::cin, cmd))
{
std::cout << cmd << std::endl;
if (cmd == "exit" || cmd == "\\exit")
break;
}
return 0;
}
Es ist besser, den Code direkt in der Frage –
@ Brian einzufügen: Ich ging und das tat. – sbi
Außerdem ist es sauberer, wenn Sie cmd.compare ("exit") anstelle von strcmp (cms, c_str(), "exit") verwenden == 0 Sie schreiben C++ - Code. Warum nicht davon profitieren? – Vagrant