2012-07-12 142 views
0

我真的很困惑关于文件结束。假设我正在运行一个无限循环。在这个循环中,我将一个整数作为输入,然后处理它,直到找到文件结尾。但是,我要检查输入是否是文件结束。我如何打破循环。这对你来说可能看起来很基本,但是任何帮助都将值得赞赏。顺便说一句,我使用窗户,所以EOF我打字CTRL + Z。我很困惑文件结束

#include<iostream> 
#include<cstdio> 
using namespace std; 

int main(void) 
{ 
    int n; 
    while(true) 
    { 
    cin >> n; 
    if(n==EOF)break; 
    cout << n << endl; 
    } 
    return 0; 
} 

当我运行这段代码,我按Ctrl + Z,它打印只有最后输入我已经给了,不休。

+1

尝试'而(CIN >> N)',而不是EOF检查。 – chris 2012-07-12 20:30:27

+0

谢谢,它的工作:) – 2012-07-12 20:34:41

回答

6

1)这不是你如何检查档案结尾。你在哪里读到operator>>会返回一个EOF值?

正确的方法,如果你已经尝试读取超出档案结尾是这样的if(cin.eof())。但是,永远不要做,因为:

2)你不应该永远检查档案结尾。相反,你应该检查“最后一次输入操作是否正常工作?”

像这样:

#include<iostream> 
#include<cstdio> 
using namespace std; 

int main(void) 
{ 
    int n; 
    while(cin >> n) 
    { 
    cout << n << endl; 
    } 
    return 0; 
} 


参考Reading from text file until EOF repeats last line

+2

不要忘记upvote任何帮助你的答案,并接受一个解决你的问题的答案。 – 2012-07-12 20:35:54

+0

尽管读取整数失败时会立即中断,但可能会在可用输入结束之前。 – 2012-07-12 20:43:18

+0

@KerrekSB,没错,但我会说这是一个全新的问题(有很多愚蠢)。原始代码也没有任何形式的验证。 – chris 2012-07-12 20:57:47