1

ファイルの最後に到達したにもかかわらず、最後の値の入力を取得して再読み込みしているように見える場所に問題がsscanfあります。fgets私のコード:

while (won == 0) {
 char command, input[MAX_LENGTH];
 fgets(input, MAX_LENGTH, stdin);

 sscanf(input, " %c\n", &command);

 printf('%c\n', command);
 check_won();
}
4

3 に答える 3

4

あなたのsscanfパターンは%c %sですが、あなたは を読んでいるだけですcommand。それは意図的なものですか?の戻り値をチェックして、fgets実際に入力を読み取っていることを確認し、 の戻り値をsscanf実際に 2 つの要素を読み取っていることを確認する (そして 2 番目の要素を破棄する) ことを検討する必要があります。入力が正しく解析および収集されておらず、check_won関数がその入力に依存している場合、配列が再初期化されないため、入力が繰り返されます。

代わりにこのようなことを試してみませんか?

if(fgets(input, MAX_LENGTH, stdin) == NULL) {
    break;
}
于 2013-05-07T04:31:56.697 に答える
0

フォーマット文字列で 2 つの要素を指定しましたが、引数 &command を 1 つしか渡しませんでした。

sscanf(input, " %c %s\n", &command);

于 2013-05-07T04:32:23.770 に答える