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

C语言如何存储二维字符串数组并横向打印学生成绩表

问题修复方案

需求回顾

需要实现的核心逻辑:

  • 采集5名学生的3门科目等级成绩,成绩取值为"A+"、"A"、"A-"这类短字符串
  • 以学生序号作为行索引、科目序号作为列索引,构建二维字符串数组存储成绩
  • 输入完成后,将数组内容按行横向打印为格式对齐的规范表格

原有代码的核心问题

  • 循环变量j未初始化,且所有while循环内没有更新j值的逻辑,运行后会直接进入无限死循环
  • 数组维度和循环边界完全写反:要求是5行(对应5名学生)、3列(对应3门科目),原有代码循环判断条件和遍历顺序完全不符合结构要求
  • 存储变量定义错误:错误使用name一维数组存储数据,无法承载「学生-科目」的二维成绩结构
  • 输入输出逻辑混乱:输入阶段没有按二维结构逐单元格采集成绩,输出阶段用puts逐字符串打印,只能纵向输出内容,无法生成横向对齐的表格

修复后完整可运行代码

#include <stdio.h>

#define STUDENT_CNT 5    // 学生总数
#define SUBJECT_CNT 3    // 科目总数
#define GRADE_LEN 4      // 成绩字符串最大长度(含结束符)

int main() {
    // 二维成绩数组:[学生索引][科目索引] = 成绩字符串
    char grades[STUDENT_CNT][SUBJECT_CNT][GRADE_LEN];
    // 科目表头,可根据实际需求修改
    const char* subjects[SUBJECT_CNT] = {"科目1", "科目2", "科目3"};
    int i, j;

    // 采集成绩输入
    printf("请依次输入5名学生3门科目的等级成绩(格式如A+、A、A-):\n");
    for (i = 0; i < STUDENT_CNT; i++) {
        printf("===== 第%d名学生 =====\n", i + 1);
        for (j = 0; j < SUBJECT_CNT; j++) {
            printf("%s成绩:", subjects[j]);
            // 限制输入长度避免缓冲区溢出
            scanf("%3s", grades[i][j]);
            // 清空输入缓冲区残留字符,避免异常输入影响后续读取
            while(getchar() != '\n');
        }
    }

    // 打印规范表格
    printf("\n\n==================== 成绩表 ====================\n");
    // 打印表头
    printf("%-8s", "学生序号");
    for (j = 0; j < SUBJECT_CNT; j++) {
        printf("%-8s", subjects[j]);
    }
    printf("\n------------------------------------------------\n");
    // 逐行打印学生成绩
    for (i = 0; i < STUDENT_CNT; i++) {
        printf("%-8d", i + 1);
        for (j = 0; j < SUBJECT_CNT; j++) {
            printf("%-8s", grades[i][j]);
        }
        printf("\n");
    }
    printf("================================================\n");

    return 0;
}

代码说明

  • 用宏定义固定学生数、科目数、成绩字符串长度,后续调整规模直接修改宏值即可
  • 输入阶段严格按照「外层遍历学生、内层遍历科目」的顺序填充二维数组,加了输入缓冲区清空逻辑,避免异常输入导致的读取错乱
  • 打印阶段用%-8s/%-8d格式化占位符实现列对齐,加上边框分隔符让表格结构清晰,完全符合逐行横向输出的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:12:12