c - 如何用C语言解决这个问题?

标签 c file io

由于某种原因,函数 loadPerson 始终返回 0 作为输出。

我认为问题与结构体PERSON中的变量score有关,但我不知道问题是什么。例如,我不知道保存函数是否会保存分数或地址的值(因为它是一个指针)。

你能帮我找出问题所在吗?

#include <stdlib.h>
#include <stdio.h>

#define N 3

typedef struct person{
    int age;
    float *scores;
} PERSON;

int savePerson(PERSON person, char *fileName){
    FILE *file;
    int result = 0;
    file = fopen(fileName,"wb");
    if (file){
        if(fwrite(&person,sizeof(PERSON),1,file)>0){
            result = 1;
        }
    }
    return result;
}

int loadPerson(PERSON *person, char *fileName){
    FILE *file;
    int result = 0;
    file = fopen(fileName,"rb");
    if (file){
        if(fread(person,sizeof(PERSON),1,file)>0){
            result = 1;
        }
    }
}

int main()
{
    char fileName[15] = "file1.bin";
    float scores[3] = {2.0,8.0,9.0};
    PERSON p1,p2;
    int i;

    p1.age = 35;
    p1.scores = scores;
    printf("Salvando\n");
    if(savePerson(p1,fileName)){
        printf("Saving OK!\n");
    }
    else{
        printf("Saving BAD!\n");
    }

    if(loadPerson(&p2,fileName)){
        printf("Loading OK!");
        printf("AGE: %d\n",p2.age);
        printf("SCORES:\n");
        for(i=0;i<N;i++){
            printf("%f,",p2.scores[i]);
        }
        printf("\n");
    }
    else{
        printf("Loading BAD!");
    }
    return 0;
}       

最佳答案

查看函数原型(prototype):int loadPerson(PERSON *person, char *fileName) 您忘记在函数末尾return result;

此外,一旦解决了这个问题,您将在尝试将数组写入文件时遇到问题。您可能希望将结构更新为以下内容:

typedef struct person{
    int age;
    float scores[N];
} PERSON;

关于c - 如何用C语言解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53103728/

相关文章:

我可以只使用 percolateDown 实现堆吗?

c++ - 在 Visual Studio 中的同一解决方案中构建 C 项目以调用 C++ 库中的函数

计算圆形数量级

c - 尝试将缓冲区写入文件,但不断出现段错误,我不明白为什么

bash - 用 bash 测试文件日期

python - 在文本文件中查找特定行,在同一行中查找特定字符并更改/修改其值

c - 线程函数内部函数中的信号量值不一致

c++ - 无法访问 "Program Files"中的 INI 文件

用于简单数据结构的 Java 文件包装 API

c++ - 防止输入小于 0 的字母或数字