it-swarm.com.de

So kennzeichnen Sie keine Eingabe mehr für den String ss in der Schleife while (cin >> ss)

Ich habe "cin" verwendet, um Wörter aus dem Eingabestream zu lesen, die ich mag

int main( ){
     string Word;
     while (cin >> Word){
         //do sth on the input Word
     }

    // perform some other operations
}

Die Codestruktur ist ungefähr so ​​wie oben. Es ist kompilierbar. Während der Ausführung gebe ich immer wieder so etwas ein

aa bb cc dd

Meine Frage ist, wie man diese Eingabe beendet? Mit anderen Worten, angenommen, die Textdatei ist nur "aa bb cc dd". Aber ich weiß nicht, wie ich das Programm wissen lassen soll, dass die Datei endet.

12
user630983

Ihr Code ist korrekt. Wenn Sie interaktiv eingeben, müssen Sie ein EOF -Zeichen senden, z. B. STRG-D.

Dieses EOF -Zeichen wird beim Einlesen einer Datei nicht benötigt. Dies liegt daran, dass, sobald Sie das Ende Ihres Eingabestreams erreicht haben, nichts mehr für "cin" übrig ist (da der Stream jetzt geschlossen ist), sodass die while-Schleife beendet wird.

17
Mike Lewis

Da andere diese Frage bereits beantworten, möchte ich diesen wichtigen Punkt hinzufügen:

Da Strg-Z unter Windows (und Strg-D unter Unix-Systemen) dazu führt, dass EOF erreicht wird und Sie die Schleife while verlassen, können Sie außerhalb der Schleife while keine weiteren Eingaben lesen, da EOF ist bereits erreicht.

Um das Lesen mit cin wieder zu aktivieren, müssen Sie das Flag eof und alle anderen Fehlerflags wie folgt löschen:

cin.clear();

Danach können Sie die Eingabe erneut mit cin lesen!

5
Nawaz
int main() {
     string Word;
     while (cin >> Word) {
         // do something on the input Word.
         if (foo)
           break;
     }
    // perform some other operations.
}
3
fuzz

Drücken Sie Strg-Z (Strg-D auf * nix-Systemen) und drücken Sie die Eingabetaste. Das sendet ein EOF und macht den Stream ungültig.

1
jonsca

cin >> some_variable_or_manipulator wird immer als Verweis auf cin ausgewertet. Wenn Sie überprüfen möchten, ob noch weitere Eingaben zu lesen sind, müssen Sie Folgendes tun:

int main( ){
     string Word;
     while (cin.good()){
         cin >> Word;
         //do sth on the input Word
     }

    // perform some other operations
}

Dies überprüft das Goodbit des Streams, das auf true gesetzt ist, wenn weder eofbit noch failbit oder badbit gesetzt sind. Wenn beim Lesen ein Fehler aufgetreten ist oder der Stream ein EOF -Zeichen empfangen hat (nachdem er das Ende einer Datei erreicht hat oder der Benutzer auf der Tastatur STRG + D gedrückt hat), gibt cin.good () false zurück. und brechen Sie aus der Schleife.

1
Null Set

Ich nehme an, Sie möchten am Ende der Datei herausspringen. Sie können den Wert von basic_ios :: eof abrufen. Am Ende des Streams wird true zurückgegeben.

0
Nickolas

Nehmen Sie die Eingabe aus einer Datei. Dann werden Sie feststellen, dass die while-Schleife endet, wenn Ihr Programm keine Eingaben mehr vornimmt. Tatsächlich beendet cin die Eingabe, wenn ein EOF -Marker gefunden wird. Jede Eingabedatei endet mit dieser Markierung EOF. Wenn dieser EOF -Marker von operator>> angetroffen wird, ändert er den Wert des internen Flags eofbit in false und folglich stoppt die while-Schleife.

0
Mostafiz Rahman

Es hilft mir, die Schleife zu beenden, indem ich ENTER drücke.

int main() {
    string Word;
    while(getline(cin,Word) && s.compare("\0") != 0) {
        //do sth on the input Word
    }

    // perform some other operations
}
0
Eldar

Sie können in der Eingabe nach einem bestimmten Wort suchen. F.e. "halt":

int main( ){
   string Word;

   while (cin >> Word){
      if(Word == "stop")
          break;

      //do sth on the input Word
   }

// perform some other operations
}
0
Serid