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

C语言程序需求:实现3次输入的通过/失败次数统计及代码修正

C语言成绩统计程序的错误分析与修正

原代码的核心错误点

  • 数组下标越界:C语言数组下标从0开始,原循环for (int i = 1; i <= 3; i++)会访问result[3],超出数组有效范围(仅result[0]、result[1]、result[2]有效),会触发未定义行为。
  • 变量未初始化:pass和fail作为计数变量未初始化为0,直接执行pass = pass + 1会使用内存中的垃圾值,导致统计结果完全错误。
  • 统计逻辑失效:&result是数组的内存地址,不可能等于数值1或2,正确逻辑应该遍历数组每个元素,判断其值来更新计数。
  • 输出可读性差:仅输出数字,无对应说明文字,无法直观理解结果含义。

修正后的代码

#include <stdio.h>

int main() {
    int result[3];
    int pass = 0;  // 初始化通过次数为0
    int fail = 0;  // 初始化失败次数为0

    // 循环读取3次输入,使用合法数组下标
    for (int i = 0; i < 3; i++) {
        printf("Enter Result (Pass=1 Fail=2): ");
        scanf("%d", &result[i]);
        
        // 输入时直接统计,同时处理无效输入
        if (result[i] == 1) {
            pass++;
        } else if (result[i] == 2) {
            fail++;
        } else {
            printf("无效输入,请输入1或2\n");
            i--;  // 回退下标,让用户重新输入当前次
        }
    }

    // 清晰输出统计结果
    printf("通过次数:%d\n", pass);
    printf("失败次数:%d\n", fail);

    return 0;
}

修正说明

  1. 修复数组下标问题,循环从0到2,确保访问数组的有效元素。
  2. 初始化pass和fail为0,保证计数从正确初始值开始。
  3. 在输入循环中直接判断输入值并更新计数,同时增加无效输入处理逻辑,强制用户输入符合要求的数值。
  4. 优化输出格式,添加文字说明,提升结果可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:43:19