Вызов:
cin >> var1 >> var2 >> var3;
эквивалентен:
cin >> var1;
cin >> var2;
cin >> var3;
Что касается вашего другого вопроса, то в C / C ++ обрабатывается все, что возвращает NULL
или нолькак ложное в выражении if
, в противном случае оно обрабатывается как истинное.
Именно поэтому строка: if(cin)
работает для проверки, есть ли еще данные для чтения в потоке.