C中的输入验证(and循环)
我正在创建一个程序,它应该验证我输入的正确值,但不幸的是,我做错了什么。 如果答案为1或0,该程序需要检查输入值10次。否则它必须再次要求答复。当输入完成时,它应该通过printf显示正确的答案,但事实并非如此 我猜“开关盒”部分出了问题。谢谢你的帮助 我的代码:C中的输入验证(and循环),c,validation,input,C,Validation,Input,我正在创建一个程序,它应该验证我输入的正确值,但不幸的是,我做错了什么。 如果答案为1或0,该程序需要检查输入值10次。否则它必须再次要求答复。当输入完成时,它应该通过printf显示正确的答案,但事实并非如此 我猜“开关盒”部分出了问题。谢谢你的帮助 我的代码: int main() { char a0, a1, a2, a3, a4, a5, a6, a7, a8, a9; char c = '0'; int a = 0, OK = 0, check = 0, valid_input =
int main()
{
char a0, a1, a2, a3, a4, a5, a6, a7, a8, a9;
char c = '0';
int a = 0, OK = 0, check = 0, valid_input = 0, a_ok;
printf("Fill in a value 1 or 0.\n\n");
while (a < 10)
{
while (valid_input == 0)
{
printf("Fill in a%d: ", a);
a_ok = scanf("%d", &OK);
if (a_ok != 1)
{
scanf("%s", &c);
}
else if (OK <0 | OK >1)
{
do
{
while (check == 0)
{
printf("Fill in a%d: ", a);
check = check +1;
}
c = getchar();
}
while (!isdigit(c));
ungetc(c, stdin);
}
else
valid_input = 1;
}
switch (a)
{
case 0:
OK = a0;
case 1:
OK = a1;
case 2:
OK = a2;
case 3:
OK = a3;
case 4:
OK = a4;
case 5:
OK = a5;
case 6:
OK = a6;
case 7:
OK = a7;
case 8:
OK = a8;
case 9:
OK = a9;
}
a = a +1;
}
/*
printf("Fill in a1: "); **<--- WANT TO REMOVE THIS PART BY LOOP**
scanf("%d", &a1);
printf("\nFill in a2: ");
scanf("%d", &a2);
printf("\nFill in a3: ");
scanf("%d", &a3);
printf("Fill in a4: ");
scanf("%d", &a4);
printf("\nFill in a5: ");
scanf("%d", &a5);
printf("Fill in a6: ");
scanf("%d", &a6);
printf("\nFill in a7: ");
scanf("%d", &a7);
printf("\nFill in a8: ");
scanf("%d", &a8);
printf("Fill in a9: ");
scanf("%d", &a9);
*/
printf("\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d", a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
getch();
return(0);
}
intmain()
{
字符a0、a1、a2、a3、a4、a5、a6、a7、a8、a9;
字符c='0';
int a=0,OK=0,check=0,valid\u input=0,a\u OK;
printf(“填写值1或0。\n\n”);
而(a<10)
{
while(有效的_输入==0)
{
printf(“填写%d:,a”);
a_ok=scanf(“%d”&ok);
如果(a_ok!=1)
{
scanf(“%s”、&c);
}
否则,如果(确定1)
{
做
{
while(检查==0)
{
printf(“填写%d:,a”);
检查=检查+1;
}
c=getchar();
}
而(!isdigit(c));
ungetc(c、stdin);
}
其他的
有效_输入=1;
}
开关(a)
{
案例0:
OK=a0;
案例1:
OK=a1;
案例2:
OK=a2;
案例3:
OK=a3;
案例4:
OK=a4;
案例5:
OK=a5;
案例6:
OK=a6;
案例7:
OK=a7;
案例8:
OK=a8;
案例9:
OK=a9;
}
a=a+1;
}
/*
printf(“填写a1:”;***在开关的每种情况下,您都忘记了break
语句:
case 0:
OK = a0;
break;
case 1:
OK = a1;
break;
/* etc. */
此外,如果
语句错误,则此:
if (OK <0 | OK >1)
只是看起来不对。这相当于:
while (!isdigit(c))
{
}
这意味着当isdigit(c)==0
时,它是一个无限循环,当isdigit(c)!=0
时,它什么也不做。也许你想写这个:
while (!isdigit(c)) {
ungetc(c, stdin);
}
但即便如此,您仍将在无限循环中将同一个字符推回到stdin
这也是错误的:
scanf("%s", &c);
c
是一个char
变量,但您告诉scanf()读取一个字符串
这不是一个错误,但您可能应该使用数组,而不是10个单独的变量:
char val[10];
因此,不是:
a0 a1 ... a9
您将有:
val[0] val[1] ... val[9]
无论如何,这个程序非常糟糕。如果你刚开始学习C,我建议你从头开始,多加注意。我建议为aXHaha使用数组是的,我刚开始学习C。很抱歉我的代码。但是谢谢你的帮助!我们都在那里。请确保你真正理解所提出的建议,n不要只是应用它们。理解实际的错误是最重要的方面。
val[0] val[1] ... val[9]