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

C语言学生数据库结构体数组显示异常问题求助

问题分析与解决方案

核心问题1:数组索引错误

在displayStudents的循环中,你始终使用currentEntries作为数组下标,而非循环变量i。currentEntries代表已添加的学生总数,数组有效索引范围是0到currentEntries-1,访问listOfStudents[currentEntries]会指向未初始化的内存区域,这就是输出空字符串和0值的直接原因。

核心问题2:输入缓冲区残留换行

main函数中执行scanf("%d", &selection)后,输入缓冲区会遗留一个换行符。后续addNewStudents中的第一个scanf("%[^\n]s", name)会直接读取这个换行符,导致姓名被读为空字符串。

次要问题:打印格式不匹配表头

原打印语句未按照表头的列布局输出,缺少序号、分隔符和换行,导致输出混乱。


修复后的完整代码片段

1. 修复displayStudents函数

void displayStudents() {
    printf("\t\tList of Student Information\n");
    printf("-----------------------------------------------------------\n");
    printf("|No.| \t\t\t Name \t\t\t |\t Major \t\t| GPA |\n");
    printf("-----------------------------------------------------------\n");

    int i;
    for (i = 0; i < currentEntries; i++) {
        // 使用循环变量i作为索引,按表头格式对齐输出
        printf("|%2d | %-25s | %-15s | %.2f |\n", 
               i+1, 
               listOfStudents[i].name, 
               listOfStudents[i].major, 
               listOfStudents[i].gpa);
    }
    printf("-----------------------------------------------------------\n");
}

2. 修复addNewStudents函数的输入问题

void addNewStudents() {
    char name[100];
    char major[100];
    float gpa;

    if (currentEntries >= 20) { // 改为>=,避免数组越界
        printf("Database is full\n");
        return;
    }
    printf("\t\t Insert Student Information \n");
    printf("-----------------------------------------------------------------------\n");
    
    // 清除输入缓冲区的残留换行
    getchar();
    printf("Name: \t ");
    scanf("%[^\n]s", name);
    
    printf("\nMajor\t: ");
    scanf(" %[^\n]s", major);
    
    printf("\nGPA\t: ");
    scanf(" %f", &gpa);

    listOfStudents[currentEntries] = createNewStudent(name, gpa, major);
    currentEntries++;
}

额外优化点

  • 将addNewStudents中的判断条件currentEntries > 20改为currentEntries >= 20,因为数组最大容量为20,索引范围是0-19,当currentEntries等于20时已无剩余空间。
  • 打印GPA时使用%.2f保留两位小数,更符合实际成绩展示需求。
  • 用%-25s、%-15s等格式化符号实现左对齐,让输出排版更整齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:06