5

ユーザーから整数を受け取り、この数値を加算演算で使用するプログラムがあります。

番号を受け入れるために使用しているコードは次のとおりです。

scanf("%d", &num);

ユーザーが小数点付きの文字または数字を入力した場合にエラーメッセージが画面に表示されるように、入力を検証するにはどうすればよいですか?

4

2 に答える 2

11

scanf戻り値を使用する必要があります。差出人man scanf

戻り値

これらの関数は、正常に一致および割り当てられた入力項目の数を返します。これは、提供された数より少ない場合もあれば、早期の一致が失敗した場合はゼロになる場合もあります。

したがって、次のようになります。

if (scanf("%d", &num) != 1)
{
    /* Display error message. */
}

「小数点付きの数値」では機能しないことに注意してください。このためには、たとえば構文解析を使用する必要がありstrtolます。もう少し複雑かもしれません。

于 2013-03-05T16:00:07.237 に答える
1

変換指定子またはを使用scanfして入力をテキストとして読み取り、ライブラリ関数を使用して変換を実行します。%sfgetsstrtol

#define MAX_DIGITS 20 // maximum number of decimal digits in a 64-bit integer

int val;
int okay = 0;

do
{
  char input[MAX_DIGITS+2]; // +1 for sign, +1 for 0 terminator
  printf("Gimme a number: ");
  fflush(stdout);
  if (fgets(input, sizeof input, stdin))
  {
    char *chk = NULL; // points to the first character *not* converted by strtol
    val = (int) strtol(input, &chk, 10);
    if (isspace(*chk) || *chk == 0)
    {
      // input was a valid integer string, we're done
      okay = 1;
    }
    else
    {
      printf("\"%s\" is not a valid integer string, try again.\n", input);
    }
  }
} while (!okay);
于 2013-03-05T16:50:11.240 に答える