fgetsは、バッファへの入力を取得する前に「\ n」を待機します[重複]
stdinからfgetsを使用しようとしていますが、「\ n」と入力した後にのみ画面からデータの収集が開始されます。'\ n'までスタックします。
注:コードにscanfがありません
コードの関連部分:
while (reconnect_flag)
{
printf("%s\n", RECONNECT_MENU);
char Input[2] = "";
fgets(Input, 2, stdin);
}
回答
JonathanLeffler
fgets()最初の改行(またはEOF)までのデータ行を読み取ることを目的としているため、意図したとおりに動作しています。
さらに、端末の設定で何か特別なことをしない限り、端末は、改行がヒットするまで、データの行の内容を端末から読み取るプログラムに送信しません。POSIX(Unix)の観点からの詳細については、正規端末入力と非正規端末入力を参照してください。したがって、を介して1文字を読み取ろうとするとfgets(Input, 2, stdin)
、改行が入力されるまで入力を受け取りません。
入力が利用可能になり次第入力する場合は、プラットフォーム固有のAPIを使用する必要があります。つまり、Windowsで行うことは、POSIXベースのシステムで行うこととは異なります。Linuxを含むUnixのさまざまなフレーバーです。POSIXベースのシステムでも、curses
ライブラリーを使用する場合もあれば、低レベルのシステムコールを使用する場合もあり、それを行うには複数の方法があります。