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我正在Windows 7之上的cygwin上使用最新版本的g ++进行编译。

好的 现在自己修复了这个问题:

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

最新更新