2012-04-30 21 views
5

Tôi đang sử dụng Mã khối với Trình biên dịch GNU GCC. Và tôi đang cố gắng mã nàySự không nhất quán khi sử dụng printf

int number,temp; 

printf("Enter a number :"); 
scanf("%d",&number); 
temp = sqrt(number); 
printf("\n%d",sqrt(number)); //print 987388755 -- > wrong result 
printf("\n%d",temp); //print 3 -- > write result 

return 0; 

và trong mã này có một kết quả cho giá trị đầu vào 10 được

987388755 
3 

gì là sai trong mã này?

+0

Bạn đang sử dụng trình biên dịch GNU GNU C? – tbert

Trả lời

10

sqrt trả về một đôi:

double sqrt(double x); 

Bạn cần:

printf("\n%g",sqrt(number)); 
0

Thay đổi:

printf("\n%d",sqrt(number)); 

tới:

printf("\n%g",sqrt(number)); 

Lưu ý rằng sqrt() trả về một double, không phải là int - trình biên dịch của bạn nên cảnh báo bạn về điều này, miễn là bạn đã bật cảnh báo. ví dụ. gcc -Wall ... (và nếu bạn không bật cảnh báo, thì đã đến lúc bắt đầu tạo thói quen).

6

Sử dụng thông số định dạng không chính xác trong printf() gọi Undefined Behaviour. sqrt() trả về gấp đôi nhưng bạn sử dụng %d.