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

C语言按优先级筛选数组元素求和及显示异常问题排查

C语言清单筛选功能异常问题修复

问题原因

两处运行异常对应三个明确的代码编写错误:

  • 求和值未正确重置:进入优先级筛选分支时写的是sum == 0;,这是无实际效果的比较运算,不会把sum赋值为0,sum始终保留全量物品的总金额230101.70,最终输出的合计值自然是全量总和,而非筛选结果的合计。
  • 循环终止条件错误:遍历物品的for循环把priority[i] == 1写进了循环执行判断条件,遍历到第二个物品(优先级为3)时条件不成立,直接终止循环,只会输出第一个优先级为1的物品,不会遍历到后面第四个优先级为1的物品。
  • 额外逻辑漏洞:
    • 读取用户输入的筛选优先级时,直接把值写入了存储原始物品数据的priority[i]数组,会覆盖原有物品的优先级数据;
    • 筛选逻辑硬编码只判断优先级1,用户选2、3级优先级时不会执行任何展示和计算。

修复方案

  1. 单独定义变量存储用户输入的筛选优先级,避免污染原始物品数据;
  2. 把sum ==0改为sum =0,进入筛选分支前正确重置求和值;
  3. 调整for循环逻辑:循环只负责遍历所有物品,在循环内部判断当前物品优先级是否匹配筛选值,匹配才输出、累加金额,去掉循环条件里的优先级判断,同时去掉硬编码的优先级1判断,支持1-3所有优先级筛选。

修复后核心代码

int filterPriority; // 存储用户选择的筛选优先级
do {
    printf("\nHow do you want to forecast your wish list?\n"
           " 1. All items (no filter)\n"
           " 2. By priority\n"
           " 0. Quit/Exit\n");
    printf("Selection: ");
    scanf(" %d", &selection);
    if (selection == 1) {
        printf("\n====================================================\n");
        printf("Filter:   All items\n");
        printf("Amount:   $%10.2lf\n", sum);
        printf("Forecast: %d years, %d months\n",
                ((int)(sum / netIncome) / 12),
                (((int)(sum / netIncome) % 12) + 1));
        printf("====================================================\n");
    } else if (selection == 2) {   
        sum = 0; // 正确重置求和变量
        printf("\nWhat priority do you want to filter by? [1-3]: ");
        scanf(" %d", &filterPriority);  // 筛选值存入独立变量,不修改原始数据           
        printf("\n====================================================\n");
        printf("Filter:   by priority (%d)\n", filterPriority);
        // 遍历所有物品
        for (i = 0; i < item; i++) {
            // 匹配筛选优先级才输出、累加
            if (priority[i] == filterPriority) {
                printf("%3d  %5d    %5c    %11.2lf\n",
                       i + 1, priority[i], finance[i], cost[i]);
                sum += cost[i];
            }
        }
        printf("Amount:   $%10.2lf\n", sum);
        printf("Forecast: %d years, %d months\n",
               ((int)(sum / netIncome) / 12),
               (((int)(sum / netIncome) % 12) + 1));
        printf("====================================================\n");
    } else if (selection < 0 || selection > 2) {
        printf("\nERROR: Invalid menu selection.\n");
    }
} while (selection != 0);

修复后筛选优先级1时,会正确输出两个匹配条目,合计金额为59900.15+16700.75=76600.90,符合预期。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:18:19