+-
如何知道C中的下一个字符是否为EOF
我需要知道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 - 乐贴网