C语言中如何通过用户输入指定成绩整型数组的元素个数?
原代码错误点
- 定义变长数组
grades时,用于指定数组长度的变量user未初始化,存储的是随机内存值,数组长度不可控,属于未定义行为 - 循环终止条件错误使用
grades[user]作为判断依据,该内存位置不在数组合法访问范围内,读取的值是随机垃圾值,并非用户指定的成绩总数 - 缺少用户输入成绩总数量的交互步骤,代码根本无法获取用户需要录入的成绩条数
可运行实现方案
以下代码基于C99标准的变长数组特性实现,逻辑清晰,适配绝大多数主流编译器(GCC、Clang、新版本MSVC均支持):
#include <stdio.h> int main(void) { int total, i; printf("请输入需要录入的成绩总数量:"); // 基础输入校验,确保用户输入的是正整数 if (scanf("%d", &total) != 1 || total <= 0) { printf("输入无效,请输入大于0的正整数\n"); return 1; } int grades[total]; // 按用户指定的数量循环录入成绩 for (i = 0; i < total; i++) { printf("请输入第%d个成绩:", i + 1); scanf("%d", &grades[i]); } // 遍历输出所有录入的成绩 printf("\n===== 已录入成绩列表 =====\n"); for (i = 0; i < total; i++) { printf("索引:%d,成绩:%d\n", i, grades[i]); } return 0; }
如果需要兼容不支持C99变长数组的老旧编译环境,可以使用动态内存分配方案,代码如下:
#include <stdio.h> #include <stdlib.h> int main(void) { int total, i; printf("请输入需要录入的成绩总数量:"); if (scanf("%d", &total) != 1 || total <= 0) { printf("输入无效,请输入大于0的正整数\n"); return 1; } // 申请对应大小的内存空间存储成绩 int *grades = (int*)malloc(total * sizeof(int)); if (grades == NULL) { printf("内存分配失败,程序退出\n"); return 1; } for (i = 0; i < total; i++) { printf("请输入第%d个成绩:", i + 1); scanf("%d", &grades[i]); } printf("\n===== 已录入成绩列表 =====\n"); for (i = 0; i < total; i++) { printf("索引:%d,成绩:%d\n", i, grades[i]); } // 释放动态申请的内存,避免内存泄漏 free(grades); return 0; }
内容的提问来源于stack exchange,提问作者Mervan
相关产品推荐
相关产品推荐

