2011-10-15 5 views
0

나는 그것이 a=2b=2에 대한 2을 반환 이유를 전혀 생각 ..이 없다C 2 + 2 = 2 (더블를 arithmetics)

어떤 아이디어가?

#include <stdlib.h> 

int main() 
{ 
    double a,b,c; 
    printf("a="); 
    scanf("%d", &a); 
    printf("b="); 
    scanf("%d", &b); 
    printf("c="); 
    scanf("%d", &c); 

    printf("x=%d", a+b); 

    return 0; 
} 
+2

질문에 답변했지만 다른 오류가 있습니다. 'stdlib.h '를 포함하고 있지만'printf'와'scanf'는'stdlib.h'에 정의되어 있지 않습니다. 'stdio.h '가 필요합니다. 그건 그렇고, 컴파일러는 정말로 이러한 모든 문제에 대한 경고를 발행해야합니다. 출력물을 읽었습니까? –

답변

2

지정자 "%d"은 정수를 기대 당신은 double의 주소를 전달한다. scanf에서 잘못된 지정자를 사용하면 정의되지 않은 동작이 발생합니다.

또한 printf에서 잘못된 지정자를 사용하는 것은 똑같습니다. printf은 가변 인수 인 a + b을 두 번 취하기 때문에 정수로 변환 할 수 없습니다.

+0

작동 중입니다. 도와 주셔서 감사합니다! – DavidMG

1

printf는 %d 대신 %f과 같은 것을 사용해야합니다. scanf도 마찬가지입니다.

2

%d은 정수를 나타내는 것으로 float/double은 %f 또는 %lf입니다.

1

당신이 부동 입력을 수락 %lf 형식 문자로 scanf (및 printf)를 사용하려는 경우,하지 %d (하는 정수입니다).

scanf 호출이 float 변수에 정수를 쓰고 있으므로 현재 프로그램의 동작은 정의되지 않습니다. 또한 프로그램 상단에 include <stdio.h>이 누락되었습니다. 이와 같은 오류를 잡으려면 C 컴파일러의 경고를 켜십시오.

$ gcc so-scanf.c -Wall 
so-scanf.c: In function ‘main’: 
so-scanf.c:6:5: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration] 
so-scanf.c:6:5: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default] 
so-scanf.c:7:5: warning: implicit declaration of function ‘scanf’ [-Wimplicit-function-declaration] 
so-scanf.c:7:5: warning: incompatible implicit declaration of built-in function ‘scanf’ [enabled by default] 
so-scanf.c:7:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘double *’ [-Wformat] 
so-scanf.c:9:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘double *’ [-Wformat] 
so-scanf.c:11:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘double *’ [-Wformat] 
so-scanf.c:13:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat] 
+0

scanf를 사용하여 double에 대해 % lf가 필요합니다. –

+0

@PaulR 죄송합니다. 고마워, 고쳐. – phihag