C语言编程:输入整数对直至零,求乘积之和的代码问询
问题分析与代码修复
看起来你在实现一个累加多组m×n乘积的程序,但现有代码存在几个关键逻辑问题,我帮你梳理并修复:
现有代码的核心问题
- 输入逻辑缺失:你只读取了一次
m和n,完全没实现“持续输入直到遇到0”的循环逻辑,也没处理终止条件。 - 错误的累加循环:
for(i = m; i <= n; i++)这个循环会把同一个m*n重复累加n-m+1次,这和你“每组m×n只加一次”的需求完全不符。 - 输出格式错位:因为错误的循环,你会重复打印同一个
m*n多次,而不是每组输入对应打印一个项。
修正后的完整代码
#include <stdio.h> #include <stdbool.h> int main() { int m, n, sum = 0; bool is_first_item = true; // 标记是否为第一个项,控制加号输出 printf("请输入成对整数(m,n),输入0终止:\n"); while (true) { // 读取第一个数,若为0或读取失败则终止循环 if (scanf("%d", &m) != 1 || m == 0) { break; } // 读取对应n,读取失败也终止 if (scanf("%d", &n) != 1) { break; } int product = m * n; sum += product; // 处理输出格式:第一个项前不加加号,后续项先打印加号 if (!is_first_item) { printf(" + "); } printf("%d*%d", m, n); is_first_item = false; } // 根据是否有有效输入,输出结果或提示 if (!is_first_item) { printf(" = %d\n", sum); } else { printf("没有输入有效项\n"); } return 0; }
关键改动说明
- 输入循环逻辑:用
while(true)持续读取输入,先判断m是否为0,满足终止条件就跳出循环,确保符合“输入零为止”的需求。 - 累加逻辑修正:每组
m和n只计算一次乘积并累加到总和,去掉了多余的for循环。 - 输出格式优化:用
is_first_item变量控制加号的输出,避免第一个项前出现多余的加号,同时增加了无有效输入时的友好提示。 - 鲁棒性提升:检查
scanf的返回值,避免输入非整数时程序陷入死循环。
内容的提问来源于stack exchange,提问作者DamagedSoul97
相关产品推荐
相关产品推荐

