Was ist der Unterschied zwischen while (cin) und while (cin num)?

8

Was ist der Unterschied zwischen den folgenden zwei Schleifen und wenn jeder gestoppt wird?

%Vor%     
Ahmed_Mohsen 20.10.2013, 21:33
quelle

4 Antworten

12

Schauen wir uns das unabhängig an:

%Vor%

Diese Schleife bedeutet intuitiv "Werte weiterlesen von cin in x , und solange ein Wert gelesen werden kann, fahre mit dem Schleifen fort." 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, solange x gültig ist.

Betrachten Sie andererseits diese Schleife:

%Vor%

Die Anweisung while (cin) bedeutet "solange alle vorherigen Operationen auf cin erfolgreich waren, wird die Schleife fortgesetzt." Sobald wir die Schleife betreten, versuchen wir, 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 von y ausgeführt wird, so dass Sie eine weitere Iteration der Schleife als nötig haben.

Sie sollten definitiv die erste Version dieser Schleife der zweiten vorziehen. Es wird nie eine Iteration ausgeführt, es sei denn, es gibt gültige Daten.

Hoffe, das hilft!

    
templatetypedef 20.10.2013, 21:41
quelle
3

Der Unterschied besteht darin, dass wenn cin >> whatever zu false führt, Ihre zweite Version immer noch den Rest der Schleife ausführt.

Nehmen wir an, dass cin >> whatever fehlschlägt. Was wird passieren?

%Vor%     
Luchian Grigore 20.10.2013 21:39
quelle
1
%Vor%

Dies liest ganze Zahlen, bis ein Nicht-Integer-, EOF- oder anderer Stream-Fehler auftritt. Immer wenn Sie x innerhalb der Schleife verwenden, wissen Sie, dass sie erfolgreich gelesen wurde.

%Vor%

Dies liest ganze Zahlen, bis ein Nicht-Integer-, EOF- oder anderer Stream-Fehler auftritt. Der Stream wird jedoch nur vor dem Einlesen der Ganzzahl geprüft. Wenn Sie y in der Schleife verwenden, können Sie nicht garantieren, dass sie erfolgreich gelesen wurde.

    
paddy 20.10.2013 21:41
quelle
0

cin >> x speichert den Eingabewert in x.

Wie bei while(cin) gibt std::cin einen booleschen Wert zurück, wenn ein Fehler-Flag gesetzt ist. Daher setzen Sie die while-Schleife fort, solange std::cin intern kein Fehler-Flag gesetzt hat. Ein Fehler-Flag kann gesetzt werden, wenn es ein end of file -Zeichen findet, oder wenn es nicht in den Wert gelesen und gespeichert wurde.

    
Caesar 20.10.2013 21:41
quelle

Tags und Links