Feststellen wann cin alle Wörter in string eingelesen hat
-
Wie kann ich den hier feststellen, wenn ich einen Satz eingegeben habe, wann alle Wörter in temp eingelesen sind, und ich die Schleife beenden kann?
string temp; while(cin >> temp) { if(....) break; }MfG
Stromberg
-
Theoretisch über die Eingabe von eof (unter Windows ctrl+z), was in der praxis aber irgendwie buggy ist.
Wenn es wirklich um einen satz geht, kannst du auch den string nach einem abschließenden Punkt untersuchen (if(tmp[tmp.size()-1]=='.')break;). Das könnte man noch mit getline verbinden.
Oder du fügst im while kopf eine weitere Bedingung ein (zB while(cin>>tmp && tmp!="ENDE"); ).
-
Für ganze sätze würde ich an deiner Stelle, std::getline nutzen.
-
Hab ich mir dass so zu einfach vorgestellt, ich glaub irgendwie schon:

string temp; while(cin >> temp) { if(cin.eof()) break; }Geht nicht
bricht nicht ab. Warum?MfG
Stromberg
-
*Stromberg schrieb:
Geht nicht
bricht nicht ab. Warum?Weil sobald nichts mehr im
std::cinPuffer ist, wird beim Anwender wieder um eine Eingabe gebeten. Mir wäre nicht bekannt, dassstd::cinjemals das Flageofbitsetzen kann. Aber es wurde dir ja bereits empfohlen, dass du wohl besser mitstd::getlinearbeiten solltest.Grüssli
-
Ja schon klar, es muss aber mit cin >> sein. ODer ist es damit unmöglich?
MfG
Stromberg
-
Warum muss es mit dem "cin >>" sein?
-
*Stromberg schrieb:
Ja schon klar, es muss aber mit cin >> sein. ODer ist es damit unmöglich?
Wird ein Satz mit einem Punkt beendet? Dann wäre es allenfalls möglich.
std::string word; while(word.empty() || '.' != *word.rbegin()) { assert(std::cin >> word); // mach was mit word. }Es muss dann allerdings garantiert sein, dass der Satz wirklich grammatikalisch korrekt ist

Wäre mir persönlich jedenfalls zu gefährlich. Ich arbeite lieber mit Textzeilen
Grüssli