检查Character而不是Integer

时间:2014-02-19 17:47:07

标签: c

我的程序添加了用户输入的数字。它运行并且运行良好,直到输入字符而不是整数。有一种简单的方法可以确保只从键盘输入整数吗?

这是我的代码。

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

int main(int argc, char **argv)
{
   int n, sum = 0, i, TotalOfNumbers;

   printf("Enter the number of integers you want to add\n"); 
   scanf("%d", &n); 

   printf("Enter %d integers\n",n); 

   for (i = 1; i <= n; i++)
   {
      scanf("%d",&TotalOfNumbers);
      sum = sum + TotalOfNumbers;
   }

   printf("Sum of entered integers = %d\n",sum); 

   return 0;
}

3 个答案:

答案 0 :(得分:1)

检查输入流上的ferror状态

scanf("%d",&TotalOfNumbers);
if(!ferror(stdin)){
  sum = sum + TotalOfNumbers;
}

答案 1 :(得分:1)

您需要检查scanf的返回值。如果输入是有效数字,则返回1.如果输入不是有效数字,则返回其他内容。以下是修改后的代码以进行检查。

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

int get_number()
{
   int num;
   int ret;

   ret = scanf("%d", &num);

   if (ret != 1) {
      printf("bad number\n");
      exit(EXIT_FAILURE);
   }

   return num;
}

int main(int argc, char **argv)
{
   int n, sum = 0, i, TotalOfNumbers;

   printf("Enter the number of integers you want to add\n"); 
   n = get_number();

   printf("Enter %d integers\n",n); 

   for (i = 1; i <= n; i++)
   {
      TotalOfNumbers = get_number();
      sum = sum + TotalOfNumbers;
   }

   printf("Sum of entered integers = %d\n",sum); 

   return 0;
}

答案 2 :(得分:1)

除了发布的答案之外,还有一些选项不是一般的,但更快。 首先,如果你想跳过一些最后一组字符。在下面的示例中,所有字母!+都会被删除

int n;
scanf("%*[a-zA-Z!+]%d",&n);
printf("\n%d",n);
输入

 weweqewqQQWWW!!!!+++3332

输出

 3332

下一个选项是使用缓冲区,允许读取所有内容,直到满足数字,然后读取数字。缺点是缓冲区大小有限

char buf[25];
int n;

scanf("%[^0-9]%d",buf,&n);
printf("\n%d",n);

输入

fgfuf@$@^^@^@@4565

输出

4565