2012-11-22 45 views
2

我正在创建一个程序,它应该验证我的输入正确的值,但不幸的是我做错了什么。 如果答案是1或0,此程序需要检查输入值10次。否则,它必须再次请求答案。当输入完成时,它应该通过printf显示正确的答案,但它不会。在C(和循环)中输入验证

我的猜测是'switch case'部分有问题。帮助将不胜感激!

我的代码:

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); 
} 
+1

我会建议使用aX阵列 – thumbmunkeys

回答

7

你忘了break声明交换机的每一种情况下:

case 0: 
    OK = a0; 
    break; 
case 1: 
    OK = a1; 
    break; 
/* etc. */ 

此外,这if说法是错误的:

if (OK <0 | OK >1) 

你可能意图使用||,逻辑OR运算符而不是|,按位或运算符。

此外,您的aN变量(a0,a1,... a9)不会在任何地方初始化。他们的初始值是不确定的。

另外(我跑出来的延续的话这里:-P),这样的:

while (!isdigit(c)); 

只是看起来是错误的。这是相同的:

while (!isdigit(c)) 
{ 
} 

这意味着它是一个无限循环时isdigit(c) == 0和无助时isdigit(c) != 0。也许你的意思,而不是写:

while (!isdigit(c)) { 
    ungetc(c, stdin); 
} 

但即便如此,你会在一个无限循环来推动相同的字符回stdin

这也是错误的:

scanf("%s", &c); 

cchar变量,但你告诉scanf()函数读取一个字符串。但

不是错误,而不是10级个人的变量,你应该使用数组来代替:

char val[10]; 

这样,而不是:

a0 a1 ... a9 

你必须:

val[0] val[1] ... val[9] 

无论如何,这个程序是非常破碎的。如果你刚刚开始学习C,我建议从头开始并多加注意。

+0

哈哈是的,我刚开始学习C.对不起,我的代码。但谢谢你帮助我! – buzzerNL

+0

我们都去过那里。只要确保你真正理解了所提出的建议,而不仅仅是应用它们。了解实际的错误是最重要的方面。 –