C语言累加求和程序输出异常求助:无法逐次打印累加结果
程序问题分析与修正
任务要求:编写程序,用户输入数字时将其累加到总和,每次输入后打印当前总和,输入0时程序终止。
我的代码如下:
#include <stdio.h> int main(){ int n; int i; int sum = 0; for(i=0; i<=n; i++){ scanf("%d", &i); if(i==0){ break; } sum += i; } printf("%d\n", sum); return 0; }输出不符合预期:输入1、2、3、4、5、0时,预期输出为1、3、6、10、15,但目前仅输出最终总和15。
问题点分析
- 未实现每次输入后的打印逻辑:代码只在循环结束后打印最终总和,完全没完成"每次输入后打印当前总和"的核心要求,这是输出不符合预期的直接原因。
- 循环逻辑存在错误:
- 变量
n未初始化就用于循环条件i<=n的判断,属于未定义行为,程序运行时可能出现随机异常。 - 将循环控制变量
i作为输入接收变量,直接破坏了for循环的计数逻辑,容易引发不可预料的循环异常。
- 变量
- 输入格式注意事项:如果输入是逗号分隔的数字,
scanf("%d")只会读取第一个有效数字,后续逗号会被视为无效输入,建议按回车逐个输入数字。
修正后的代码
#include <stdio.h> int main(){ int num; int sum = 0; while(1){ // 无限循环,输入0时终止 scanf("%d", &num); if(num == 0){ break; } sum += num; printf("%d\n", sum); // 每次累加完成后立即打印当前总和 } return 0; }
修正说明
- 使用
while(1)创建无限循环,比for循环更适配这种不确定循环次数的场景,逻辑更直观清晰。 - 单独用
num变量接收输入,避免占用循环控制变量,防止逻辑混乱。 - 每次累加后立即调用
printf输出当前总和,完全满足任务要求。 - 删除了未使用且未初始化的变量
n,简化代码的同时避免了未定义行为。
内容的提问来源于stack exchange,提问作者Hassan
相关产品推荐
相关产品推荐

