尝试错误检查放入数组的元素以确保它们是
1)介于1和42之间
2)数据类型int
有关如何操作的任何建议吗?
#include <stdio.h>
#define SIZE 6
int main()
{
int i;
int numbers[SIZE];
for(i=0;i<SIZE;i++)
{
printf("Enter number %d of your 6 numbers, between 1 and 42(integers only)!",i+1);
scanf("%d",*(numbers+i));
if(*(numbers+i)<1 || *(numbers+i)>42 || *(numbers+i) != /*data type int*/)
{
printf("Invlaid input");
}
else
{
printf("Valid input");
}
}
getchar();
getchar();
return 0;
}
答案 0 :(得分:1)
只有错误 - 你传递给scanf
某些不确定的值,这些值被scanf
视为地址 - 这会导致未定义的行为。
纠正一个,
scanf("%d",(numbers+i));
此外,您不需要检查它 - 编译器将确保它。声明类型为T
的数组后,它的类型为T
- 它的每个元素都是。{这是数组的特征。
您想说的是用户是否输入了整数 - 可以通过检查scanf
的返回值来检查。
类似的东西,
if( scanf("%d",&numbers[i]) != 1){
fprintf(stderr,"Error in input");
exit(EXIT_FAILURE);
}
你还能做什么?而不是退出你可以消费那些stdin
scanf
无法接受的错误输入,因为那些不符合scanf
所期望的内容。 %d
格式说明符。
但如果您计划进行该级别的输入验证,我建议您使用fgets
和strtol
组合。您接受一行输入,然后使用strtol
对其进行解析。 strtol
具有丰富的错误控制功能。 (我故意避免提及atoi
因为它没有提供错误检查)。