while(cin>>x){...}
Wyrażenie:
cin>>zmienna
zwraca strumień, czyli w tym przypadku cin. Umożliwia to takie łańcuchy:
cin>>zmienna>>zmienna2>>zmienna3;
Ten kod jest rownowazny z:
cin>>zmienna; cin>>zmienna2; cin>>zmienna3;
Dodatkowo istnieje konwersja typu istream na bool. cin jest typu istream. Wrzucając go w miejsce gdzie oczekuje się wartości logicznej zachodzi niejawna konwersja na bool. Podobnie jakbyś zrobił tak:
if(cin)
lub
while(cin)
obiekt istream daje True gdy stumień jest otwarty i nie było błędów oraz false w przeciwnym wypadku. Dzięki temu konstrukcja:
while(cin>>x){...}
wczytuje dane dopóki są jakieś na wejściu.
Drugi zapis:
for(;;){cin>>x; ...}
nie działa, bo nie ma warunka przerwania pętli. To jakby napisać:
while(true) {cin>>x;}