3

非常に単純な例 - 簡単な解決策を期待:

char x[7];
if(fgets(x,5,stdin))
    printf("y");
else
    printf("n");

バイト制限を超えて入力したときに「n」を出力できないようです-それを強制したり、超えたときにキャッチしたりできる簡単な方法はありますか?

補足質問として、上記のスニペットで実際に「n」が発生する入力の例は何ですか? 私は今ポイントを本当に見ていません..

乾杯、B

4

3 に答える 3

1

fgets失敗すると 0 が返されるため、「n」を出力として取得するには、最初に何も入力せずに、control-D または control-Z (または OS が入力の終わりを示すために使用するもの) を使用します。

読むスペースを超えて入力されたことを検出するには、最後に読み取った文字が改行であったかどうかを確認します。そうであれば、行全体を読み取ります。そうでない場合は、さらに待機します。

于 2012-04-05T05:55:58.757 に答える
0
  1. 標準入力経由などで待機しているデータがまだあるかどうかを確認する必要がありますselect()

  2. リダイレクト/dev/nullまたは 0 バイトのファイルを stdin にリダイレクトすると、問題が発生する可能性があります。

于 2012-04-05T05:55:36.507 に答える
0

fgets は、何も読み取れなかった場合 (通常はファイルの終わりを意味する) にのみ NULL を返します。

fgets は 1 行、またはその行のバッファーに収まる数の文字を読み取るため、変数 x に改行文字が含まれているかどうかを確認する必要があります。

于 2012-04-05T05:57:12.563 に答える