You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

教材提供的C语言示例代码运行输出错误,请求排查解决

问题分析与修复方案

嘿,我一眼就看出你遇到的问题了——这是个非常典型的格式说明符不匹配错误!

问题根源

你调用的sqrt()函数返回的是double类型的浮点数,但在printf里却用了%d(整数格式符)来输出它。C语言不会自动帮你把浮点数转换成整数格式输出,反而会把浮点数在内存中的二进制数据直接当成整数来解析,这就导致了那些看起来完全无法理解的奇怪数字。

另外还有两个小细节需要注意:

  • 标准C语言要求main函数必须声明返回类型,应该写成int main()而不是无类型的main()
  • 你可能漏了包含stdio.h头文件,printf函数需要这个头文件才能正常工作

修正后的代码

#include <math.h>
#include <stdio.h>  // 必须包含的头文件,printf依赖它

int main() {
    int i;
    // 调整制表符让输出更整齐
    printf("	Number	Square Root of Number
");
    // 先测试小范围数据,方便查看效果
    for (i = 0; i <= 20; ++i) {
        // 用%.2f控制平方根保留两位小数,输出更美观
        printf("	%d		%.2f
", i, sqrt((double)i));
    }
    return 0;  // 符合C标准的main函数返回值
}

预期输出

运行修正后的代码,你会得到正常的结果:

Number	Square Root of Number
	0		0.00
	1		1.00
	2		1.41
	3		1.73
	4		2.00
	...

如果需要输出更多位数的小数,只需要把%.2f改成%.4f(保留四位)或者直接用%f(默认保留六位)就可以啦。

内容的提问来源于stack exchange,提问作者JWood

火山引擎 最新活动