Конец файла определяется сбоем операции ввода.
So, in
cin>>x;
cout<<"char: "<< x << endl;
оператор вывода выполняется даже в случае сбоя операции ввода.
И когда он терпит неудачу, он не обновляет x
.
Вместо тестирования .eof()
проверьте .fail()
.
Вы можете сделать это, используя объект потока непосредственно в качестве условия, например.
#include<iostream>
using namespace std;
int main()
{
char x;
while( cin >> x )
{
cout<<"char: "<< x << endl;
}
}
Здесь выражение cin >> x
выполняет операцию ввода, которая может обновить x
, и в качестве результата выражения возвращает ссылку на поток, то есть на cin
. Таким образом, cin
используется непосредственно как условие. Это вызывает преобразование в логическое значение, которое определено таким образом, что само по себе эквивалентно !cin.fail()
(т. е. выражение cin >> x
в качестве условия эквивалентно написанию !(cin >> x).fail()
или, как выражение с запятой, (cin >> x, !cin.fail())
).
person
Cheers and hth. - Alf
schedule
12.11.2012
eof()
. К настоящему времени существуют тысячи дубликатов этого вопроса, и если вопрос не является дубликатом, он все еще содержит ту же ошибку... ворчать ворчать - person Kerrek SB   schedule 12.11.2012