2013-10-09 2 views
0
void mul() 
{ 
    int x,y,sum = 0; 
    scanf("%d",&x); 
    scanf("%d",&y); 
    while (x != 0){ 
     if (x%2 != 0) 
      sum = sum + y; 
     x = x/2; 
     y = 2*y; 
    } 
    printf("%d",sum); 
} 

int main() 
{ 
    char c; 
    printf("Enter two numbers and y to exit"); 
    //mul(); 
    scanf("%c",&c); 
    while (c != 'y'){ 
     mul(); 
    } 
    return 0; 
} 

이 프로그램을 실행하면 'y'입력이 종료되지 않습니다. 왜?여기 논리 오류가 있습니까?

+0

당신은'scanf와()'의 정수를 읽는 것은'는 scanf를 위해 뒤에 줄 바꿈을 떠나하는 문제로 실행됩니다()'처리하는 문자를 읽고. 읽은 데이터를 인쇄하여 디버깅해야하므로 프로그램이 입력으로 처리한다고 생각하는 정보를 얻고 있는지 여부를 알 수 있습니다. 또한'scanf()'의 반환 값을 테스트해야한다. 초기 EOF가 있거나 숫자 데이터를 예상 할 때 숫자가 아닌 데이터가 있으면 이상한 행동을하게됩니다. –

답변

2

while 루프에서 스캔하지 않습니다. 이 작업을 수행합니다 :

char c = 'n'; 
while (c != 'y') 
{ 
    printf("Enter two numbers and y to exit"); 
    scanf("%c",&c); 
    mul(); 
} 

은 그냥이다 (입력) 문자와 문자 (키 입력을 입력하면 y 또는 n 같은 문자를 입력 할 때, 뭔가 특별한 지적하고 Enter 키를 치고 - 개행 문자)가 입력 버퍼에 배치됩니다. 첫 번째 문자는 scanf에 의해 소비되지만 개행 문자는 입력 버퍼에 남아 있습니다.

솔루션을 사용하여 여분의 줄 바꿈을 소비하는 것입니다

scanf(" %c", &c); 
     ^<------------Note the space 
+1

(또는 그 이상으로, while 루프에서'c'를 수정하지 않습니다.) –

+1

@Acme :'char c'를 더미 값으로 초기화하십시오. – Enigma

+1

'mul()'은'scanf()'앞에 있어야합니다. – Rohan

0

더 나은 당신이

do{ 
    scanf("%c",&c); 
    mul(); 
}while (c != 'y'); 
0

이 코드를 시도하거나 추가하려면이 방법을 "정적 INT 주"코드입니다.

int Main() 
{ 
    char c; 
    printf("Enter y to exit"); 
    scanf("%c",&c); 
    while (c != 'y') 
    { 
     mul(); 
     } return 0; } 

void mul() { 
printf("Enter two numbers"); 
int x,y,sum = 0; 
scanf("%d",&x); 
scanf("%d",&y); ................ } 
+0

public static int main'은 C가 아닙니다. –

+0

@YuHao 감사합니다. 나는 그것을 알아 차리지 못했습니다. – Rajeshkumar

관련 문제