文件结束和while循环

时间:2013-01-09 16:49:19

标签: c++ file while-loop eof

我有一个c ++代码段,它应该从文件中读取一些信息,并且无法找到文件或信息,从屏幕上读取它。这是代码:

char c;
bool found=false;
int N;
double step;
ifstream in;
in.open(name.c_str());
if(in) {
    while(!found && in >> c) {
        while(c!='=') in >> c;
        in >> N;
        if(N==wp.N) {
            found=true;
            while(c!=':') in >> c;
            in >> step;
        }
        c='a';
    }
}
if(!found) {
    cout << "max=";
    cin >> step;
}

以上是根据文件中数据的结构构建的,当信息在文件中时(即某些时候 N = wp.N )或文件没有,一切都有效不存在(即 if(in)不是真的)。​​

但是当文件存在但不包含信息时会出现问题,即 N == wp.N 永远不会成立。然后程序冻结(大概是在文件的末尾,所以发现永远不会是真的)。我期待包括 in&gt;&gt; 中的 -loop会修复此问题,但我也尝试使用 in.eof()

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可以在任何in&gt;&gt;。

之后找到eof()

所以我假设你在循环时(c!=':')或while(c!='=')

答案 1 :(得分:1)

问题在于你的第二个循环,它将无限循环 如果您在没有阅读'='的情况下到达文件末尾。你需要的 in >> c也处于条件状态。