Schleife bricht nicht ab bei " == '\n'" Bedingung
-
Warum bricht er da nicht ab:
int main() { string temp; string save; while(cin >> temp) { if(save != "" && save == temp) { cout << "Same word order!" << endl; cout << save << " = " << temp << endl; break; } if(temp[temp.size()] == '\n') // HIER! { cout << "CIN-Buffer read to end!" << endl; break; } save = temp; }Wenn ich zum Beispiel "Er zieht durchs Land" eingebe, dann müsste doch beim letzten ausgelesenen Wort der letzte Buchstabe '\n' sein (weil man ja mit Enter die Eingabe bestätigt)? Und somit könnte ich erkennen, ob ich beenden will oder nicht?
Was mach ich falsch?MfG
Stromberg
-
Wenn ich zum Beispiel "Er zieht durchs Land" eingebe, dann müsste doch beim letzten ausgelesenen Wort der letzte Buchstabe '\n' sein (weil man ja mit Enter die Eingabe bestätigt)? Und somit könnte ich erkennen, ob ich beenden will oder nicht?
Enter ist aber \r.
Guck doch mal was drin steht...
Simon
-
verusch mal temp.size() - 1 weil temp.size() hinter dem letzten ist
-
Weder mit '\r' nocht mit size() -1 funktionirt es

MfG
Stromberg
-
\r\nwird bei dieser Anweisung gar nicht erst eingelesen. Das Zeug bleibt imstd::cinPuffer drin und kommt nicht in deinetempVariable. Leerzeichen werden beioperator >>standardmässig ignoriert.Grüssli
-
Und wie würdest du dann die Abbruchbedingung gestalten? Also für des Enter, wenn alle Wörter eingelesen wurden?
MfG
Stromberg
-
#include <string> #include <sstream> // Für std::istringstream #include <iostream> int main() { std::string line; std::geline(std::cin, line); // Verwende nun zum Beispiel Boost.Tokenizer // oder trenne die Teile von Hand auf. // Du kannst auch sowas machen: std::string word; std::istringstream iss(line); // iss ist so lange gültig, wie es etwas im Puffer hat. // Sobald also das ende von line erreicht wurde, // bricht die Schleife ab. while(iss >> word) { // ... } // ... return 0; }Grüssli