教材提供的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




