2014-09-16 2 views
0

코드 조각을 작성하고 코드 일부를 C 언어로 switch 문을 사용하고 있습니다. 나는 그것을 누르면 n을 누르면 정상적으로 끝날 때까지 기본 문을 무한 루프됩니다 y를 누르면 종료됩니다. 나는 여기서 뭘 잘못하고 있니? while 문을 변경했지만 올바른 문을 찾을 수 없습니다. Enter 키를 누르면switch statment 무한 루프 생성

int main() 
    { 
     char ans; 
     printf("DO you want to continue?"); 
     scanf("%c", &ans); 

    do 
    { 
     switch(ans) 
     { 
      case 'y': 
       some stuff... 
        printf("DO you want to continue?"); 
        scanf("%c", &ans); 
        break; 
      case'n': 
        printf("BYE"); 
        break; 
      default: 
       printf("error, you must enter y or n"); 
       continue; 
     } 
} 
while (ans!='n'); 
return 0; 
}  
+0

은 C처럼 보입니다 ... – meda

+0

"y"또는 "n"을 입력하지 않고 오류를 인쇄하는 경우 사용자가 다시 문자를 입력하도록 하시겠습니까? 메시지? – BadZen

답변

1

는 줄 바꿈 문자 \n 입력 스트림에 추가됩니다. switch(ans)y, n 또는 “ 그 외 모든 것은 ” (줄 바꿈 문자 포함) 만 처리하기 때문에 코드에서이를 예상하지 않습니다.

이 문제를 해결하려면 scanf이 형식 문자열을 " %c"으로 변경하여 이전 공백을 무시하도록 허용하십시오 (예 :

scanf(" %c", &ans); 
// ^space character inserted here 

나는 그것을 다음과 같이 루프 내부에 scanf 전화를 이동하는 것이 더 나을 생각 :

int main() 
{ 
    char ans; 

    do 
    { 
     printf("DO you want to continue?"); 
     if (scanf(" %c", &ans) != 1) 
      break; 

     switch(ans) 
     { 
      case 'y': 
       // some stuff... 
       break; 
      case 'n': 
       printf("BYE"); 
       break; 
      default: 
       printf("error, you must enter y or n"); 
       continue; 
     } 
    } 
    while (ans!='n'); 
} 

항상 scanf()의 결과를 확인하는 것을 잊지 마십시오. 성공적으로 스캔 된 항목의 수를 반환합니다 (귀하의 경우 1을 반환하기를 원합니다). 0 또는 음수를 리턴하면 다른 문제점이 발생했습니다.

+0

나는이 게시물을 확인하면서 나는 그것을 알아 냈다! 감사합니다. –