+-

我需要知道ifstream中的下一个字符是否是文件的结尾.我试图用.peek()来做这件事:
if (file.peek() == -1)
和
if (file.peek() == file.eof())
但都不起作用.有办法做到这一点?
编辑:我要做的是在文件中的每个单词的末尾添加一个字母.为了做到这一点,我问下一个字符是否是标点符号,但是这样最后一个字就没有多余的字母了.我正在使用char,而不是字符串.
最佳答案
istream::peek()在检测到文件结束或错误时返回常量EOF(不保证等于-1).要健壮地检查文件结尾,请执行以下操作:
int c = file.peek();
if (c == EOF) {
if (file.eof())
// end of file
else
// error
} else {
// do something with 'c'
}
您应该知道底层OS原语read(2)仅在您尝试读取文件末尾时发出EOF信号.因此,当您只读取文件中的最后一个字符时,file.eof()将不会为true.换句话说,file.eof()为false并不意味着下一个读操作将成功.
点击查看更多相关文章
转载注明原文:如何知道C中的下一个字符是否为EOF - 乐贴网