0

なぜこれが起こっているのか、私にはよくわかりません。ファイルを開いてプログラムにデータを読み込もうとしていますが、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の読み込みに失敗しました。

私は非常に愚かなことをしたと思いますが、かなり長い間これに取り組んできました。

PS私はWindows7上でcygwin上のg++の最新バージョンでコンパイルしています。

4

1 に答える 1

1

OK、これを自分で修正しました。

  • 一部の実装では、FailbitはEOFによって設定されているようです。そのため、代わりにinput.good()を使用するように切り替えた結果、すべてが良好でした。
  • また、私のプログラムには、 "="の部分もifstream.get()が整数として値を返すので、それらをcharにキャストして比較する必要があるため、論理エラーが発生しました。
于 2012-06-29T09:09:31.023 に答える