非常に単純な例 - 簡単な解決策を期待:
char x[7];
if(fgets(x,5,stdin))
printf("y");
else
printf("n");
バイト制限を超えて入力したときに「n」を出力できないようです-それを強制したり、超えたときにキャッチしたりできる簡単な方法はありますか?
補足質問として、上記のスニペットで実際に「n」が発生する入力の例は何ですか? 私は今ポイントを本当に見ていません..
乾杯、B
fgets
失敗すると 0 が返されるため、「n」を出力として取得するには、最初に何も入力せずに、control-D または control-Z (または OS が入力の終わりを示すために使用するもの) を使用します。
読むスペースを超えて入力されたことを検出するには、最後に読み取った文字が改行であったかどうかを確認します。そうであれば、行全体を読み取ります。そうでない場合は、さらに待機します。
標準入力経由などで待機しているデータがまだあるかどうかを確認する必要がありますselect()
。
リダイレクト/dev/null
または 0 バイトのファイルを stdin にリダイレクトすると、問題が発生する可能性があります。
fgets は、何も読み取れなかった場合 (通常はファイルの終わりを意味する) にのみ NULL を返します。
fgets は 1 行、またはその行のバッファーに収まる数の文字を読み取るため、変数 x に改行文字が含まれているかどうかを確認する必要があります。