2013-10-20 8 views

Antwort

12

die an diesen unabhängig Werfen wir einen Blick:

while(cin >> x) { 
    // code 
} 

Diese Schleife, intuitiv, bedeutet „Lesewerte von cin in x halten, und solange ein Wert gelesen werden kann, weiterhin Looping.“ Sobald ein Wert gelesen wird, der kein int ist, oder sobald cin geschlossen ist, wird die Schleife beendet. Dies bedeutet, dass die Schleife nur ausgeführt wird, während x gültig ist.

Auf der anderen Seite, sollten Sie diese Schleife:

while(cin){ 
    cin >> y; 
    //code 
} 

Die Aussage while (cin) Mittel „während alle früheren Operationen auf cin ist es gelungen, eine Schleife fortgesetzt werden.“ Sobald wir die Schleife betreten, werden wir versuchen, einen Wert in y zu lesen. Dies könnte erfolgreich sein oder es könnte fehlschlagen. Unabhängig davon, welcher Fall der Fall ist, wird die Schleife weiterhin ausgeführt. Dies bedeutet, dass wenn einmal ungültige Daten eingegeben wurden oder keine Daten mehr zu lesen sind, die Schleife noch einmal mit dem alten Wert y ausgeführt wird, so dass Sie eine weitere Iteration der Schleife als nötig haben.

Sie sollten auf jeden Fall die erste Version dieser Schleife an die zweite bevorzugen. Es wird niemals eine Iteration ausgeführt, es sei denn, es gibt gültige Daten.

Hoffe, das hilft!

+0

"und solange ein Wert gelesen werden kann, fahre mit dem Schleifen fort", d. H. Wenn das Lesen erfolgreich war, führe den Schleifenkörper aus. – dyp

3

Der Unterschied besteht darin, dass, wenn cin >> whatever falsch ergibt, Ihre zweite Version noch den Rest der Schleife läuft.

Nehmen wir an, cin >> whatever schlägt fehl. Was wird passieren?

while(cin >> x){ 
    // code that DOESN'T RUN 
} 

while(cin){ 
    cin >> y; 
    //code that DOES RUN, even if the previous read failed 
} 
+0

Ich glaube nicht, wie ich es im Online-Richter verwendet und das Ergebnis war falsche Antwort nicht Zeitlimit! –

0

cin >> x speichert den Eingabewert in x.

Wie bei while(cin) gibt std::cin einen Boolean zurück, ob ein Fehler-Flag gesetzt ist. Daher werden Sie in der while-Schleife fortfahren, solange std::cin kein intern gesetztes Fehler-Flag hat. Ein Fehler-Flag kann gesetzt werden, wenn es ein end of file Zeichen findet, oder wenn es nicht in den Wert lesen und speichern konnte.

1
while(cin >> x){ 
    // code 
} 

Dies liest Ganzzahlen, bis es einen nicht ganzzahligen, EOF oder anderen Stream-Fehler auftritt. Wann immer Sie x innerhalb der Schleife verwenden, wissen Sie, dass es erfolgreich gelesen wurde.

while(cin){ 
    cin >> y; 
    //code 
} 

Dies liest Ganzzahlen, bis es einen nicht ganzzahligen, EOF oder anderen Stream-Fehler auftritt. Der Stream wird jedoch nur vor überprüft die Ganzzahl lesen. Wenn Sie y in der Schleife verwenden, können Sie nicht garantieren, dass es erfolgreich gelesen wurde.

Verwandte Themen