可能重复:
Why is iostream::eof inside a loop condition considered wrong?
我正在通过cin.get()读取一组字符,我注意到我的cin.get()在输入结束时得到了一个exra字符。可能有人知道如何解决这个问题?这是我的代码:
unsigned char c;
while(!cin.eof())
{
c = cin.get();
cout << (int)c << endl;
}
我的问题是它得到的字符是255 ascii值之一。我只是不希望它获得这个额外的字符,但如果用户输入的ascii值为255而不是最后的垃圾字符,那么这应该没问题。我的输出就是一个例子:
如果我在输出中输入abc \ n:
我明白了 97 98 99 10 255
但我想: 97 98 99 10
有关如何解决此问题的任何想法?谢谢!
答案 0 :(得分:3)
没有参数的get()
函数返回int_type
,而不是char
。在流的末尾,它返回一个特殊的非字符值,表示文件结束(通常为-1)。通过将cin.get()
的结果直接分配给unsigned char
,您无意中丢弃了此eof信息。相关文档引用是:
1)读取一个字符并返回(如果可用)。否则,返回
Traits::eof()
并设置failbit
和eofbit
。
答案 1 :(得分:2)
Never use cin.eof()
as a loop condition。它几乎总是产生错误的代码,就像它在这里一样。
相反,请尝试:
int c;
while ( (c=cin.get()) != EOF ) {
cout << c << endl;
}
或者:
char c;
while (cin.get(c)) {
cout << (int)c << endl;
}