2012-11-22 5 views
2

올바른 값으로 입력을 확인해야하는 프로그램을 만들고 있지만 불행히도 잘못된 것을하고 있습니다. 이 프로그램은 대답이 1 또는 0이면 입력 값을 10 번 확인해야합니다. 그렇지 않으면 대답을 다시 요청해야합니다. 입력이 끝나면 printf에 의해 정답을 보여 주기로되어 있지만 그렇지 않습니다.C (및 루프)의 입력 유효성 확인

내 생각에 '스위치 케이스'부분에 문제가있는 것 같습니다. 도와 주시면 감사하겠습니다!

내 코드 :

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) 

당신을 0123이 아닌 OR 논리 연산자 인 ||을 사용했습니다., 비트 OR 연산자입니다.

또한, aN 변수 (a0, a1, ... a9)는 초기화되지 않습니다. 초기 값은 정의되지 않습니다. 또한

(내가 P는 여기에 계속 단어의 부족 해요)이 :

while (!isdigit(c)); 

단지 잘못된 보인다. 그것은이 동일합니다 : 그것은 무한 루프의 의미 때 isdigit(c) == 0 아무것도 isdigit(c) != 0하지 않습니다

while (!isdigit(c)) 
{ 
} 

합니다. 어쩌면 당신은 대신를 작성하는 의미 :

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

우리 모두 거기에 있었어. 단지 제안 사항을 적용하는 것이 아니라 실제로 제시된 내용을 실제로 이해했는지 확인하십시오. 실제 오류를 이해하는 것이 가장 중요한 측면입니다. –