输入验证使用scanf()的[复制](Input validation using scanf()

2019-07-21 01:23发布

这个问题已经在这里有一个答案:

  • 判断一个C字符串在C有效的int 5个回答

我具有从用户接受的整数,并且在加法运算使用该号码的程序。

我现在用接受数字的代码是这样的:

scanf("%d", &num);

如何可以验证输入,使得如果用户输入字母或数字值的小数点,被显示在屏幕上显示错误消息?

Answer 1:

你应该用scanf的返回值。 从man scanf

返回值

这些函数返回成功匹配,并分配输入项目,其可为少于规定的,或甚至零在早期匹配失败的情况下的数量。

因此,它可能是这样的:

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

请注意,它不为“数字小数点”工作。 为此,您应该宁愿使用分析和strtol的实例。 这可能是更复杂一点。



Answer 2:

读你输入的使用是文本scanf%s转换符,或者使用fgets ,然后使用strtol库函数来执行转换:

#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);


文章来源: Input validation using scanf() [duplicate]