2012-08-17 2 views
0

'y'를 한 번 누르면 아래 코드가 다시 적용됩니다.하지만 다음에 반복 할 것을 요구하지 않습니다. (또는 'y'를 누르십시오.) 루프가 끝난 후이 코드가 종료되는 이유를 알려주십시오.C 코드에서 while 루프를 선택하십시오.

main() 
{ 
char choice; 

do 
{ 
    printf("Press y to continue the loop : "); 
    scanf("%c",&choice); 
}while(choice=='y'); 

} 

답변

3

stdin이 버퍼링되기 때문입니다. 따라서 y 문자열 뒤에 \n (줄 바꿈 문자)을 입력했을 것입니다.

따라서 첫 번째 반복에는 y이 적용되지만 다음 반복에는 표준 입력 버퍼 다음에 \n이 있으므로 입력이 필요하지 않습니다. 그러나 scanf가 후행 공백을 소비하도록함으로써이 문제를 쉽게 해결할 수 있습니다.

scanf("%c ",&choice); 

참고 : "%c "

그러나에 C 후 공간, 입력이 y로 끝나는 경우 프로그램이 무한 루프에 갇혀 얻을 수 있습니다. 따라서 scanf의 결과도 확인해야합니다. 예 :

if(scanf("%c ",&choice) <= 0) 
    choice = 'n'; 
3

해당 scanf() 호출 후에 개행 문자를 읽어야합니다. 그렇지 않으면, 그 다음에 주위에 선택의 여지가 있으므로 while 루프가 나옵니다.

#include<stdio.h> 

int main() 
{ 
    char choice; 

    do 
    { 
     printf("Press y to continue the loop : "); 
     choice = getchar(); 
     getchar(); 
    } 
    while(choice=='y'); 
    return 0; 
} 
2

scanf 형식 문자열의 첫 번째 문자에는 공백을 삽입하십시오. 그러면 데이터를 읽기 전에 모든 공백 문자를 stdin에서 지 웁니다.

#include <stdio.h> 

int main (void) 
{ 
    char choice; 

    do 
    { 
    printf("Press y to continue the loop : "); 
    scanf(" %c",&choice); // note the space 
    }while(choice=='y'); 

    return 0; 
} 
관련 문제