2016-06-26 1 views
2

私はC言語の初心者です。私はKim N. Kingの本で勉強しています。 scanf()は空白を無視した数字パターンを探しますが、Enterキーもスキップしていると思います。一方、それが文字を探すのであれば、明らかに空白も取ります。%dの一致を検索するときに、Scanf機能がEnterキーを無視しますか?

したがって、このコード例では、getchar()を使用してストリームを2番目のscanf()の前にクリアする必要があります。そうしないと、ユーザーの入力を待たずに2番目のストリームが実行されます。

代わりに数字を探すと問題はありません。

printf("Enter a number: "); 
scanf("%d", &n1); 
printf("\nEnter another number: "); 
scanf("%d", &n2); 

権利(これは、Enterキーをスキップします)私の仮定ですか?

+0

「キーワードを入力」とは何ですか?改行文字は空白文字の1つです。 – MikeCAT

+0

空白は必ずしも単一の空白ではありません。 'isspace'は改行、復帰改行、改行、垂直/水平タブ、および単一の空白(何かを忘れたかもしれません)を検索します。 – Downvoter

+0

申し訳ありません。私はキーを入力するか、キーを戻すことを意味します。私はそれを編集する。 – VeVeVez

答えて

3

を入力するキー入力はnewline\n)です。これは空白文字です。 それぞれ指定するための以下に記載されるよう

C11を引用し、章§7.21.6.2、関数fscanf()

変換仕様であるディレクティブは、入力整合配列のセットを定義します。変換仕様は、以下のステップで実行される:

  • 入力空白文字を
      isspace関数によって指定されるように) 仕様は [c、またはが含まれていない限り、スキップされ n指定子。 [...]だから
  • を、はいは、先頭の空白(入力バッファで存在する)である(ある)をスキップまたは%dでは無視します。

    +1

    それを指摘してくれてありがとう。 – VeVeVez

    関連する問題