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; }
修正说明
- 修复数组下标问题,循环从0到2,确保访问数组的有效元素。
- 初始化
pass和fail为0,保证计数从正确初始值开始。 - 在输入循环中直接判断输入值并更新计数,同时增加无效输入处理逻辑,强制用户输入符合要求的数值。
- 优化输出格式,添加文字说明,提升结果可读性。
内容的提问来源于stack exchange,提问作者Cadefr6554
相关产品推荐
相关产品推荐

