7

C++ で作成したプログラムを Eclipse を使用してデバッグしようとしています。プログラムにはユーザーからの入力が含まれていますが、コンソールに入力を入力すると、コードの実行が継続されません (入力を求め続けます)。これを修正せずにデバッグすることはできません。助けていただければ幸いです。ありがとうございました。

while ループ fgets でコードがスタックします。

int main(int argc, const char**argv) {
    FILE* inputFile = NULL;

    setlocale(LC_ALL, "");
    if(argc == 2){
        inputFile = fopen(argv[1], "r");
        if (inputFile == NULL){
            printf("Problem opening file %s, make sure correct path name is given.\n", argv[1]);
            return 0;
        }
    }
    else {
        inputFile = stdin;
    }

    char buffer[MAX_STRING_INPUT_SIZE];
    // Reading commands
    while ( fgets(buffer, MAX_STRING_INPUT_SIZE, inputFile) != NULL ) {
        fflush(stdout);
        if ( parser(buffer) == error ){
            printf("ERROR\n");
            break;
        }
    };
    fclose(inputFile);
    return 0;
}
4

2 に答える 2

0

Eclipse コンソール バッファーが常に正常に機能するとは限らないことはわかっています。私の経験では、C または C++ を使用する場合は最悪です。

コンパイルしたコードを Eclipse で実行する場合、これは非常に役立ちますが、Eclipse で発生する可能性のある表示の問題をなくすことはできません。

setvbuf(stdout, NULL, 0, _IONBF);

ただし、これが Eclipse でのデバッグにどのように影響するかはわかりませんstdin。最善選択肢は、Nicolas の回答を使用して DOS コンソールを実行することです。もう少し作業が必要ですが、それで十分だと思います。

また、上記の行は、Eclipse を介してコードを実行している場合にのみ使用する必要があることに注意してください。これは、いくつかの面倒なコード内回避策を使用せずに、ある種の適切な出力バッファーを作成するためです。実際に使用するためにコンパイルするときは、この行をコメントアウトする必要があります。

于 2013-11-06T23:21:32.483 に答える