2014-04-09 1 views
1

저는 대학에서 수업을 배우는 초보자이며, 예상되는 것처럼이 코드가 항상 임의의 숫자를 생성하고 1을 생성하지 않는 이유가 궁금합니다.이중 산술은 매번 C에서 난수를 생성합니다.

코드 :

#include<stdio.h> 

int main(void){ 
    double a, b = 32.5; 
    a = 2/5 * (b - 30); 
    printf("%d\n", a); 
    return 0; 
} 

내가 코드를 실행하면 다른 임의의 값마다 출력합니다 :

-780835368 
-1509625304 
1267593528 

내가 입수 한 결과의 일부를. 어떤 도움을 주셔서 감사합니다.

+0

음, "% d"은 (는) 정수 유형을 예상합니다. –

+1

'printf ("% f \ n", a);'더 효과적입니다. 그래도 매번 답이 바뀌는 것에 놀랐습니다. 매번 동일해야하는 'a'의 처음 네 바이트를 보게 될 것입니다. 반대의 경우는 그렇지 않습니다. - 제시 한 것보다 긴 타입이 예상된다면 스택에있는 쓰레기를보고있을 것입니다. – Floris

+0

피곤하지만 0.000000 만 인쇄합니까? –

답변

5

정수 형식 지정자 %d을 통해 double을 인쇄하여 undefined behavior을 호출하고 있습니다. 대신 부동 소수점 지정자를 사용

printf("%f\n", a); 

피곤이 있지만 그것은 단지 0.000000 인쇄? 때문에 2/5

-integer division을 수행함으로써 0 초래한다. 따라서 a0에 할당됩니다. 실제 분배를 수행하는 2.0/5.0을 원했을 것입니다.

관련 문제