检查输入是否为数字

时间:2017-11-28 09:47:30

标签: c validation input numbers

我有一些代码可以从输入中获取数字直到EOF并将它们放入数组中。

#include <stdio.h>

int main(){
  int numbers[250000],i,m=0;
  while(scanf("%d",&i)!=EOF){
    numbers[m]=i;
    m++;
  }
}

我的问题是我需要检查输入是否有效(如果是数字)。如果它不是一个数字,我需要打印出一条消息,上面写着“#34;错误的输入&#34;并结束该计划。

有人可以帮帮我吗?

PS。我知道这个问题已被问过几次,我已经用Google搜索了,但我无法从答案中找出如何使代码适应我的情况。所以,对不起,如果问题似乎是多余的。

3 个答案:

答案 0 :(得分:0)

scanf的返回值是一个整数,告诉您成功读取了多少项。如果成功读取了单个整数,则scanf将返回1.

#include <stdio.h>

int main(){
  int numbers[250000],i,m=0;
  int itemsRead = 0;
  while(itemsRead = scanf("%d",&i) != EOF){
     if (itemsRead != 1)
     {
        printf("Wrong input");
        return 0;
     } 
     numbers[m]=i;
     m++;
  }
}

答案 1 :(得分:0)

您需要将输入作为字符串读取,验证其上下文实际上是一个数字,然后将其分配给数组的单元格,如下所示:

#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>

#define MAXINPUT 100

int main() {
  int numbers[250000],m=0;
  char input[MAXINPUT] = "";
  while(scanf ("%s", input)!=EOF) {
    for (size_t i = 0; i < strlen(input); i++)
        if (!isdigit(input[i]))
        {
            printf ("Entered input is not a number\n");
            exit(1);
        }
    // here we know that 'input' is a number
    numbers[m] = atoi (input);
    m++;
  }
  return 0;
}

PS:我会使用fgets()代替scanf()

答案 2 :(得分:0)

缩短@gssamaras代码,你可以有更简单的东西,比如这个

#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
    int main()
     {
      int numbers[250000],i,m=0;
      char temp;
      while(scanf("%c",&temp)!=EOF)
      {
         if(!isdigit(temp)))
           {
             printf("Wrong input");
              break;
           }
        numbers[m]=atoi(temp);
        m++;
      }
    }