c - C 结构体的读写

标签 c structure

我正在尝试制作一个程序,让用户添加、编辑、查看、加载和保存类(class)并计算他们的 GWA(一般加权平均值)。唯一不起作用的功能是类(class)的加载/阅读!

这是我的结构:

struct studrec{     
    char crsnum[MAX_CNUM];
    char crstle[MAX_CTITLE];
    float grdobt;
    float crscrd;
};

这是我的功能:

int loadCourses( struct studrec s[MAX_COURSES], int n ){

    FILE *fp=fopen("savedinputs.txt","r");
    int i;

    if(fp != NULL){
        fscanf(fp, "%d\n", &n);
        for(i=0; i<n; i++){
            fscanf(fp, "%s \n", s[i].crsnum);
            fscanf(fp, "%s \n", s[i].crstle);
            fscanf(fp, "%f \n", &s[i].grdobt);
            fscanf(fp, "%f \n", &s[i].crscrd);
        }
        printf("Loaded!");
        fclose(fp);

    }
    else{
        printf("Error reading file");
    } 

    return n;
}

我不知道为什么,但它会导致段错误。

这就是我所说的加载类(class)

main() {
//something working here

do{
    ch = dispMenu(ch);

    switch(ch){
        case 1: cnt = addCourse( crs  , cnt );
                break;
        case 2: editCourse( crs );
                break;
        case 3: searchCourse( crs );
                break;
        case 4: dispAllCourses( crs , cnt );
                break;
        case 5: computeGWA( crs );
                break;
        case 6: sortCourses( crs , cnt );
                break;
        case 7: cnt = loadCourses( crs , cnt ); //function call
                break;
        case 8: saveCourses( crs , cnt );
                break;
        case 0: printf("\n\tBye!\n");
                break;
        default: printf("\n\tInvalid Input!\n");
    }
}while(ch!=0);

}

输入全部正确(例如在 MAXCOURSES 下)

我移动了 fclose(fp) 但我不得不说 s[i].crSTLe 是一个带有空格的字符串。我该如何正确称呼他们?

最佳答案

fclose(NULL)free(NULL) 不同:只有后者被指定为“不执行任何操作”。

fclose(NULL) 是未定义的行为,并且会在 Microsoft 的 C 标准库实现上显式崩溃。因此,您应该将 fclose(fp); 调用移至 if block 的内部

关于c - C 结构体的读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22194488/

相关文章:

c - 如何从 CodeVision AVR 迁移到 AVR Studio 5

php - 无捆绑 Symfony 4 中的整体结构

c - 嵌套结构的不完全类型结构问题

C:将文本文件读入结构数组

c - 如何释放结构内的结构数组?

我可以将结构传递给采用 void* 的函数吗?

java - 这是一个内部类吗

c - 如何更改以下 Makefile 以使其适用于 MacOS?

c - 如何从数组中获取循环参数并将其更改为打印符号

c - 在以下使用 C 的情况下,pNext 指针将是什么?