验证数组的输入

时间:2015-04-21 20:55:10

标签: c

我试图验证数组的输入,只允许在数组的每个索引处输入一个单个数字整数(2或3)。例如a = [2,3,2,3,2,2,2,2,2,3]。我的尝试如下。

int main()
{
        int a[10];
        int b;
        bool c= false;
        printf( "Please the 10 values: \n");
        while(c)
        {
            for(b=0;b<10;b++)
            {

                scanf("%d", &a[b]);//enter each value individually
                if(&a[b]==2 || &a[b]==3)
                {
                    c= true;
                }
                else
                {
                    printf("please the value");
                    scanf("%d", &a[b]);
                    c= false;
                }
            }

        }
}

2 个答案:

答案 0 :(得分:2)

如果要查看,则必须更改代码

if(&a[b]==2 || &a[b]==3)

if((a[b]==2) || (a[b]==3))   //no need for address of (&) operator

但是,对于像int a[10];这样的数组,请使用

 for(b=0;b<32;b++)

将超出分配的内存,您将遇到未定义的行为。

也就是说,else部分没有检查重复输入的有效性。你也需要照顾它。

此外,main()的推荐签名为int main(void)

答案 1 :(得分:0)

当值正确时增加计数器b scanf将返回成功扫描的项目数。在这种情况下一个。
如果scanf没有返回一个,则else将读取一个字符,然后scanf可以再次尝试。

int main()
{
    int a[10];
    int b = 0;
    printf( "Please the 10 values: \n");
    while(b < 10)
    {
        printf( "enter value for a[%d]\n", b);
        if ( ( scanf("%d", &a[b])) == 1) {//enter each value individually
            if(a[b]==2 || a[b]==3)
            {
                b++;//correct value increment b
            }
        }
        else //scanf failed to read an int
        {
            getchar ( );//read a character and try again
        } 
    }
}