我是编程的初学者,我无法弄清楚以下代码有什么问题:
#include <stdio.h>
int main(void)
{
long double radius = 0.0L;
long double area = 0.0L;
const long double pi = 3.1415926353890L;
printf("please give the radius ");
scanf("%Lf", &radius);
area = pi * radius * radius;
printf("Area of circle with radius %.3Lf is %.12Lf\n", radius,
area);
return 0;
}
这实际上是直接从教程中复制的,当我运行它时,我得到0.000000000000的区域,我试图改变为区域的初始值,但结果没有改变,有人能告诉我这里有什么问题吗? / p>
更新:我在code :: blocks,GNU GCC编译器中运行它。我尝试了5作为半径,正确打印出半径,但面积是0.000 .......
从长双变为双重修正了问题...
答案 0 :(得分:4)
您的代码在gcc / g ++编译器中运行良好,但在mingw编译器的情况下输出0.0000 ....这是因为mingw使用了Microsoft C库,我似乎记得这个库不支持80位长双(微软C编译器因各种原因使用64位长双倍)。
但是,如果您使用double
代替long double
,那么您将始终获得预期结果。
答案 1 :(得分:2)
Code :: Blocks默认为旧的错误编译器。使用开关-D__USE_MINGW_ANSI_STDIO=1
进行编译时,此错误在mingw-w64中得到修复。
您可以download and install将此编译器转换为Code :: Blocks,然后将该选项添加到编译器选项中;或者作为源代码的第一行:
#define __USE_MINGW_ANSI_STDIO 1