输入流中用成员 eofbit 来记录是否遇到 EOF ,再遇到EOF后 eofbit将被设置为1, 可以用成员函数 ::eof()来测试。
输入流是以行为缓冲的 意思是只有在一次输入以 enter 结束时 输入流才真正开始工作(读取)
EOF (win -- ctrl+z,unix -- ctrl + d)
而只有当 EOF 出现在一行输入的首部时 输入流才会正确的设置 eofbit
当EOF 出现在 一行输入的中间或者末尾 输入流会自动忽视掉 EOF 以及 跟在它后面的参数
example :
int x;
while ( cin >> x )
cout << x;
当输入 1 2 3 EOF 4 5 6 <enter> 后, 只有1 2 3 被正确输入 而 EOF 4 5 6将被输入流忽视 直接等待下面的输入
也就是说 1 2 3 EOF 4 5 6 <enter> 的效果 和 只输入 1 2 3 是一模一样的。
(因为 EOF 是 cin 不能识别的数据)
unix 下的 ctrl + D 和 win下的 ctrl + z 的不同在于: ctrl + d == ctrl + z + <enter> ; 其它是一样的;
也就是说 1 2 3 ^z <enter> 等价于 1 2 3 ^d