2013-10-22 3 views
1

do-while을 사용하여 작은 프로그램을 실행하려고합니다.do-while 루프를 완전히 실행할 수 없습니다.

#include<stdio.h> 
#include<conio.h> 
void main() 
{ 
char another; 
int num; 
do 
{ 
    printf("Enter a number"); 
    scanf("%d",&num); 
    printf("Square of %d id %d",num,num*num); 
    printf("Want to another another number y/n"); 
    scanf("%c",&another); 
}while(another=='y'); 
} 

이제 프로그램을 실행하려고하면 정상적으로 실행됩니다. 숫자를 입력하면 사각형이 표시됩니다. 그런 다음 Want to enter another number y/n을 봅니다. 그러나 어떤 키 (y 또는 n)를 누르 자마자 입력을 제공하기 위해 enter 키를 누르기 전에 프로그램이 종료됩니다. 나는 여러 번 시도했지만 성공하지 못했습니다.

그러나 사용자에게 y 또는 n 대신 1 또는 2를 입력하도록 요청하면 프로그램이 정상적으로 실행됩니다. 이 경우 정수 입력을 받아 while 블록을 확인할 수 있습니다. another == 1 인 경우 프로그램이 다시 실행됩니다.

제 문제는 while 상태의 문자를 확인할 수없는 이유입니다.

답변

1

작동하지 않는 이유는 scanfnum를 취득 후, 새로운 광고가 버퍼에 여전히 있다는 때문에 그것은 다음과 scanf%c 형식 지정자에 의해 처리 될 것이다. 원래 scanf("%c:,&another); 컴파일되지 않습니다

scanf(" %c", &another); 
//  ^space 

참고,하지만 난 그게 오타의 가정을 고정하는 직접적인 방법은 사용하는 것입니다. 항상 int main을 사용하거나 정의되지 않은 동작입니다.

+0

감사합니다. 당신은 정말로 나를 많이 도왔습니다. 나는 내 코드에 어떤 문제가 있는지 생각해 보았다. 넌 나를 구했다. 하지만 왜 % c 전에 공간이 필요하고 % d에 공간이 필요하지 않은지 설명해 주시겠습니까 ?? –

+0

@ user2899258 기본적으로 줄 바꿈 문자는 유효한 문자이지만 유효한 정수가 아니기 때문에'scanf'는 형식 지정자에'[','c' 또는 @가있을 때 공백 문자 (새 줄 포함) 만 처리합니다. 'n'. 그리고'% c '앞에 공백을 추가하면'scanf'가 필요한 문자 앞에 공백을 무시하게됩니다. –

관련 문제