оператор извлечения удаляет разделитель?

Насколько я понимаю, оператор извлечения>> разделяется пробелом. Удаляет ли оператор извлечения разделитель из потока? Например, скажем, у меня есть файл

6
Foo
Bar

и код

ifstream fin(filename);
int x;
fin >> x;

файловый поток по-прежнему содержит символ новой строки, следующий за цифрой 6 (что может испортить последующие операторы getline)? Или это было удалено в процессе извлечения?


person Bugalugs Nash    schedule 28.04.2012    source источник
comment
Да, и новая строка все еще была там, но трудно сказать, было ли это из-за того, как работает оператор извлечения, или из-за того, что перед новой строкой в ​​файле был еще один невидимый символ пробела, например. возврат каретки   -  person Bugalugs Nash    schedule 28.04.2012


Ответы (2)


Неизрасходованная часть потока остается неизменной. Таким образом, последующий вызов getline вернет пустую строку.

Если вы не уверены в точном содержании файла, попробуйте cat -A filename.

person log0    schedule 28.04.2012

Попробуйте. Ты можешь сделать

ifstream fin(filename);
string x;
fin >> x;
cout<<x<<"foo";

вы это заметите ;)

person vguzmanp    schedule 28.04.2012