首页 > 解决方案 > 如何用C中的文件解决这个问题?

问题描述

由于某种原因,该函数loadPerson总是0作为输出返回。

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

你能帮我找出问题吗?

#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;
}       

标签: cfileio

解决方案


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

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

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

推荐阅读