buz*_*rNL 2 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 = 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);
}
Run Code Online (Sandbox Code Playgroud)
您忘记了break交换机的每种情况下的声明:
case 0:
OK = a0;
break;
case 1:
OK = a1;
break;
/* etc. */
Run Code Online (Sandbox Code Playgroud)
此外,这种if说法是错误的:
if (OK <0 | OK >1)
Run Code Online (Sandbox Code Playgroud)
您可能打算使用||逻辑OR运算符,而不是|按位OR运算符.
此外,您的aN变量(a0,, a1... a9)不会在任何地方初始化.他们的初始值未定义.
另外(我在这里用完延续词:-P),这个:
while (!isdigit(c));
Run Code Online (Sandbox Code Playgroud)
看起来不错.它相当于:
while (!isdigit(c))
{
}
Run Code Online (Sandbox Code Playgroud)
这意味着它是一个无限循环isdigit(c) == 0,什么时候什么也不做isdigit(c) != 0.也许你打算写这个:
while (!isdigit(c)) {
ungetc(c, stdin);
}
Run Code Online (Sandbox Code Playgroud)
但即便如此,你也会将同一个角色推回到stdin无限循环中.
这也是错的:
scanf("%s", &c);
Run Code Online (Sandbox Code Playgroud)
c是一个char变量,但你告诉scanf()读取一个字符串.
不是错误,而是代替10个单独的变量,您应该使用数组:
char val[10];
Run Code Online (Sandbox Code Playgroud)
所以,而不是:
a0 a1 ... a9
Run Code Online (Sandbox Code Playgroud)
你会有:
val[0] val[1] ... val[9]
Run Code Online (Sandbox Code Playgroud)
无论如何,这个程序非常破碎.如果你刚开始学习C,我建议从头开始并多加注意.