检测文件尾(EOF)-----在c++中,假设将一个文件内容输入到cin中,cin检测到EOF即文件结尾时,cin将eofbit和failbit都设置为1,可以通过成员函数eof()来查看eofbit是否被设置;如果检测到EOF,则cin.eof()将返回bool值ture,否则返回false。failbit和eofbit相同,成员函数为cin.fail()。有的系统支持键盘模拟EOF,下边使用键盘模拟EOF来列举一个实例。
#include <iostream>
int main()
{
using namespace std;
char ch;
int count = 0;
cin.get(ch);
while(cin.fail() == false) //test for EOF
{
cout << ch;
++count;
cin.get(ch);
}
cout << endl << count << "characters read\n";
return 0;
}
实验实例及输出结果:
The green bird sings in the winter.<ENTER>
The green bird sings in the winter.
Yes,but the crow files in the dawn.<ENTER>
<CTRL>+<Z><ENTER>
73 characters read
此实例中使用<CTRL>+<Z>作为键盘模拟文件尾。
前面指出过,cin方法检测到EOF时,将设置cin对象中的一个指示EOF条件的标记。设置这个标记后,cin将不读取输入,再次调用cin也不管用。对于文件输入,这是有道理的,因为程序不应该读取超出文件尾的内容。然而,对于键盘输入,用可能使用模拟EOF来结束,但稍后要读取其他输入。cin.clear()方法可能清除EOF标记,使输入继续进行。