1. ホーム
  2. c

[解決済み】シンプルなC言語のscanfが機能しない?重複

2022-02-20 04:36:36

質問

などとやってみると

int anint;
char achar;

printf("\nEnter any integer:");
scanf("%d", &anint);
printf("\nEnter any character:");
scanf("%c", &achar);
printf("\nHello\n");
printf("\nThe integer entered is %d\n", anint);
printf("\nThe char entered is %c\n", achar);

これは整数を入力し、2番目の scanf を完全に入れ替えたとき、これは本当に奇妙なことです。 char スキャンフが先)、うまくいきます。一体何が問題なのでしょうか?

解決方法は?

を使用して入力を読み取る場合 scanf の場合、リターンキーが押された後に入力が読み込まれますが、リターンキーで生成された改行は scanf を読み込むと、次回は char 標準入力から読み込まれるように改行が用意されています。

回避する方法の1つは fgets を使って入力を文字列として読み込み、必要なものを抽出します。 sscanf としています。

char line[MAX];

printf("\nEnter any integer:");
if( fgets(line,MAX,stdin) && sscanf(line,"%d", &anint)!=1 ) 
   anint=0;

printf("\nEnter any character:");
if( fgets(line,MAX,stdin) && sscanf(line,"%c", &achar)!=1 ) 
   achar=0;

改行を消費するもう一つの方法は、次のようになります。 scanf("%c%*c",&anint); . また %*c は、バッファから改行を読み込んで破棄します。

これを読むといいかもしれません。

C FAQ : なぜみんなscanfを使ってはいけないと言うのですか?