Rückgabewert von cin
-
Hallo,
ich hab da mal ne Frage zu folgendem Code:int main() { while (cin) { // mach irgendwas } return 0; }Wie lange wird die Schleife ausgeführt, bzw. wann wird cin==0?
Gibt es diesen Fall überhaupt, dass cin==0?
-
Die Schleife wird solange ausgeführt wie cin == true (1, in Worten EINS) ist und nicht solange cin != 0. Ist ein winziger Unterschied.

Ansonsten kommt es darauf an was cin sein soll und ob es in einem Schleifendurchlauf einen anderen Wert zugewisen bekommt. Falls dies nicht der Fall ist hast du eine Endlosschleife bzw. wird er die Schleife nie durchlaufen.
-
Ansonsten kommt es darauf an was cin sein soll
Ich denke wir dürfen in diesem Fall annehmen, dass es sich bei cin um std::cin also um das Streamobjekt das den Standardeingabestrom repräsentiert handelt.
Wie lange wird die Schleife ausgeführt
cin als Objekt der Klasse basic_istream<char> besitzt einen Operator void*, der in diesem Kontext aufgerufen wird. Der Operator void* liefert einen Wert != 0, falls fail() false liefert. Die Schleife läuft also solange bis fail() == true ist. fail() wiederum liefert true, sobald das fail-bit des Streams gesetzt wurde. Das passiert z.B. beim Versuch Daten in einem ungültigen Format zu lesen oder aber auch nachdem eof gelesen wurde.
-
cin als Objekt der Klasse basic_istream<char> besitzt einen Operator void*, der in diesem Kontext aufgerufen wird. Der Operator void* liefert einen Wert != 0, falls fail() false liefert. Die Schleife läuft also solange bis fail() == true ist. fail() wiederum liefert true, sobald das fail-bit des Streams gesetzt wurde. Das passiert z.B. beim Versuch Daten in einem ungültigen Format zu lesen oder aber auch nachdem eof gelesen wurde.
Genau das wollte ich wissen, danke
