You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:20:30