1. ホーム
  2. c

[解決済み] fgets() が入力を待たない

2022-02-17 14:56:50

質問

以下のコードを書きました。

int N;
scanf("%d", &N);
int i;
for (i = 0; i < N; i++) {
  char line[LINE_MAX];
  if (fgets(line, LINE_MAX, stdin) != NULL) {
    // do stuff with line here
    printf("%c - %c\n", line[0], line[1]);
  }
}

入力ファイルには行数が書かれていて、その行数に続いて処理を行いたい行数が書かれています。そこで、その行数を N . そのあと fgets を取得し、その行を処理できるようにする。

しかし fgets は、初回はstdinを待たないようです。私はいつも - で、その後、入力待ちとなります。つまり、ループの最初の繰り返しでは、標準入力を待たずに fgets で区切られた2つの空文字を出力するだけです。 - を私の printf を使用します。

なぜでしょう?どうすれば fgets は毎回入力を待つのでしょうか?スレッドの問題のような気がします。

解決方法は?

として ジーコサウルス が残した改行を処理していないのでは? scanf . を修正することができます。 scanf の書式文字列を考慮しています。

scanf("%d *[^\n]", &N);

*[^\n] は、整数入力の後にある改行以外のものは無視するが、改行については何もしない(スキップする)、と言っています。

テストプログラムの出力です。

emulawsk@cs:~/testing$ ./test2
3
13
1 - 3
26
2 - 6
59
5 - 9