ifstream在声明时设置failbit

时间:2012-06-28 14:15:29

标签: ifstream

我真的不明白为什么会发生这种情况。我正在尝试打开一个文件来读取我的程序中的一些数据,但是failbit立即被设置,在它周围移动了错误消息,似乎在我尝试input.open()之前,failbit实际上已经设置好了。代码中未声明的变量是遍布其他地方的全局变量(杂乱但稍后会进行优化)以下是较大项目中的违规函数:

int read_input()
{
ifstream input;
string value;
int file_complete=0;
int count=0;

if(input.failbit)
    printf("Really?\n");

input.clear();

input.open("Input.txt");

while(!file_complete)
{
    if(input.failbit)
    {
        printf("Reading in set-up value number %d failed.", count+1);
        getchar();
        return 1;
    }
    else if(input.eofbit)
    {
        file_complete=1;
    }

    if(input.get()=='=')
    {
        getline(input, value);

        switch(count)
        {
            case 0:
                n_loci=atoi(value.c_str());
                count++;
                break;
            case 1:
                n_founders=atoi(value.c_str());
                count++;
                break;
            case 2:
                n_self=atoi(value.c_str());
                count++;
                break;
            // Add more cases later
        }
    }
}

input.close();

return 0;
}

这个程序对我来说是:

真的? 读取设置值1失败。

我假设我做了一些非常愚蠢的事情,但现在已经有一段时间了。

P.S我正在使用最新版本的gg在Windows 7上的cygwin上进行编译。

1 个答案:

答案 0 :(得分:1)

现在好了解决这个问题:

  • 在某些实现中似乎是由EOF设置的Failbit,所以我转而使用input.good(),因此一切都很好。
  • 我的程序中还有一些逻辑错误,检查“=”部分也是因为ifstream.get()将它的值作为整数返回,所以我需要将它们转换回字符进行比较。