5

我正在使用带有 GNU GCC 编译器的代码块。我正在尝试这段代码

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;

在这段代码中,输入值 10 的结果是

987388755  
3

这段代码有什么问题?

4

3 回答 3

10

sqrt返回一个双精度:

double sqrt(double x);

你需要:

printf("\n%g",sqrt(number));
于 2012-04-30T10:38:20.030 回答
6

printf()在调用中使用不正确的格式说明符Undefined Behavioursqrt()返回 double 但您使用%d.

于 2012-04-30T10:39:45.383 回答
0

改变:

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

到:

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

请注意,sqrt()返回 a double,而不是int- 您的编译器应该对此发出警告,只要您启用了警告。例如gcc -Wall ...(如果您没有启用警告,那么是时候开始养成它的习惯了)。

于 2012-04-30T10:39:33.200 回答