我试图验证数组的输入,只允许在数组的每个索引处输入一个单个数字整数(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;
}
}
}
}
答案 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
}
}
}