我的程序添加了用户输入的数字。它运行并且运行良好,直到输入字符而不是整数。有一种简单的方法可以确保只从键盘输入整数吗?
这是我的代码。
#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;
}
答案 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