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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:09:19