我需要知道下一个char ifstream是否是文件的结尾.我正在尝试这样做.peek():
if (file.peek() == -1)
Run Code Online (Sandbox Code Playgroud)
和
if (file.peek() == file.eof())
Run Code Online (Sandbox Code Playgroud)
但都不起作用.有办法做到这一点?
编辑:我要做的是在文件中的每个单词的末尾添加一个字母.为了做到这一点,我问下一个字符是否是标点符号,但是这样最后一个字就没有多余的字母了.我正在努力char,而不是string.
zwo*_*wol 23
istream::peek()当检测到文件结束或错误时,返回常量EOF(不保证等于-1).要健壮地检查文件结尾,请执行以下操作:
int c = file.peek();
if (c == EOF) {
if (file.eof())
// end of file
else
// error
} else {
// do something with 'c'
}
Run Code Online (Sandbox Code Playgroud)
你应该知道,底层操作系统原始的,read(2)只有当你尝试读取信号EOF 过去的文件的末尾.因此,file.eof()当你仅仅阅读不会是真的达到文件中的最后一个字符.换句话说,file.eof()假为并不意味着下一个读操作将成功.