1. ホーム
  2. c

[解決済み】C言語で入力が整数型かどうかチェックする

2022-02-08 04:10:19

質問

アトイとかそういう関数が使えないのが難点です(確か数学演算に頼ればいいんですよね)。

 int num; 
 scanf("%d",&num);
 if(/* num is not integer */) {
  printf("enter integer");
  return;
 }

試してみました。

(num*2)/2 == num
num%1==0
if(scanf("%d",&num)!=1)

が、どれもうまくいかなかった。

何か思い当たることはありますか?

解決方法は?

num は常に整数を含む。 int . その リアル をチェックしていないことが問題です。 scanf の戻り値です。 scanf は読み取りに成功した項目の数を返すので、この場合、有効な値の場合は1を返さなければなりません。そうでない場合は、無効な整数値が入力されたことになり num 変数はおそらく変更されていない (つまり、初期化されていないため、任意の値が残っている) と思われます。

コメントでは、ユーザーが整数を入力した後にエンターキーを押すことだけを許可したいようですね。残念ながら、これは単純に scanf("%d\n") しかし、ここにそのためのトリックがあります。

int num;
char term;
if(scanf("%d%c", &num, &term) != 2 || term != '\n')
    printf("failure\n");
else
    printf("valid integer followed by enter key\n");