在什么情况下输出会出现这种错误



我正试图在代码部队上解决问题200B。我测试了我的代码,结果很好。但当我把它上传到在线法官系统时,我在第一个测试案例中就失败了。它说我的输出是-0.000000000000,而不是66.66666666 7。
但我已经在Visual Studio C++2010、MacOS clang 13.0.0和Linux GCC 6.3.0上编译和运行了,输出都和我的一样,66.666666667。我很好奇,想弄清楚在什么情况下输出可能是-0.0000000000000。
在我的电脑上,
输入:
3
50 50 100
输出:
66.66666666666 7
在在线评委系统上,
输入:
3
50 50 50 100
参与者的输出
-0.000000000000000
陪审团的答案
66.66666666666 7
检查者评论
错误答案第一个数字不同-预期:"66.66667",发现:"-0.000000",错误="1.0000000">

#include <stdio.h>
int main(void)
{
int n;
double sumOrange = 0;
double sumDrink = 0;
scanf ("%d", &n);

while (n-- > 0) {
int m;
scanf("%d", &m);
sumOrange += m / 100.0;
sumDrink++;
}
printf("%.12lfn", (sumOrange / sumDrink) * 100.0);
return 0;
}

我只是不明白为什么我的产出会是-0.000000000000。请帮忙,谢谢。

更新:在不同版本的GCC(4.9、5.1、6.3(上测试,不会出现错误的输出。推测原因可能在于printf的具体实现。

问题是因为GNU gcc C11中的printf函数不支持%.12lf格式。它应该改为%.12f。有关更多信息,您可以阅读下面的文章:

打印中双精度的正确格式说明符

最新更新