C语言for循环用int正常,改用double后失效问题求助
问题分析与修复
核心问题点
- main函数返回类型错误:C语言标准规定
main函数的返回类型必须是int,使用double会触发未定义行为,可能导致程序异常。 - scanf格式符不匹配:读取
double类型变量时,必须使用%lf格式符,而不是%f(%f用于读取float类型)。格式符不匹配会导致num被错误赋值,比如输入的数值被解析为极小值,直接让循环条件i < num不成立,循环被跳过。 - 求和逻辑错误:初始
result = 1,循环从i=1开始,会重复累加1/1,正确的求和逻辑应该是:要么初始result=0,循环从i=1到i<=num;要么初始result=1,循环从i=2到i<=num。
修正后的代码
#include <stdio.h> int main(){ double num, result = 0; printf("Input a number: "); scanf("%lf", &num); for (double i = 1; i <= num; i++) { result += 1/i; } printf("Result: %f", result); return 0; }
额外说明
如果坚持初始result=1,可以把循环改成从i=2开始:
// 部分代码修改 double num, result = 1; // ... for (double i = 2; i <= num; i++) { result += 1/i; }
内容的提问来源于stack exchange,提问作者effendi
相关产品推荐
相关产品推荐

