fgetsは、バッファへの入力を取得する前に「\ n」を待機します[重複]

Jan 02 2021

stdinからfgetsを使用しようとしていますが、「\ n」と入力した後にのみ画面からデータの収集が開始されます。'\ n'までスタックします。

注:コードにscanfがありません

コードの関連部分:

while (reconnect_flag)
    {
        printf("%s\n", RECONNECT_MENU);
        char Input[2] = "";
        fgets(Input, 2, stdin);
    }

回答

JonathanLeffler Jan 03 2021 at 22:43

fgets()最初の改行(またはEOF)までのデータ行を読み取ることを目的としているため、意図したとおりに動作しています。

さらに、端末の設定で何か特別なことをしない限り、端末は、改行がヒットするまで、データの行の内容を端末から読み取るプログラムに送信しません。POSIX(Unix)の観点からの詳細については、正規端末入力と非正規端末入力を参照してください。したがって、を介して1文字を読み取ろうとするとfgets(Input, 2, stdin)、改行が入力されるまで入力を受け取りません。

入力が利用可能になり次第入力する場合は、プラットフォーム固有のAPIを使用する必要があります。つまり、Windowsで行うことは、POSIXベースのシステムで行うこととは異なります。Linuxを含むUnixのさまざまなフレーバーです。POSIXベースのシステムでも、cursesライブラリーを使用する場合もあれば、低レベルのシステムコールを使用する場合もあり、それを行うには複数の方法があります。