如何检查数组C中元素的数据类型

时间:2018-02-22 16:14:34

标签: c arrays types

尝试错误检查放入数组的元素以确保它们是

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;
}

1 个答案:

答案 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格式说明符。

但如果您计划进行该级别的输入验证,我建议您使用fgetsstrtol组合。您接受一行输入,然后使用strtol对其进行解析。 strtol具有丰富的错误控制功能。 (我故意避免提及atoi因为它没有提供错误检查)。