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


  • Administrator

    *Stromberg schrieb:

    Geht nicht 😞 bricht nicht ab. Warum?

    Weil sobald nichts mehr im std::cin Puffer ist, wird beim Anwender wieder um eine Eingabe gebeten. Mir wäre nicht bekannt, dass std::cin jemals das Flag eofbit setzen kann. Aber es wurde dir ja bereits empfohlen, dass du wohl besser mit std::getline arbeiten 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?


  • Administrator

    *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


Anmelden zum Antworten