如何从C中的二进制文件中读取两种不同的数据类型?

时间:2016-11-02 14:49:58

标签: c fwrite fread

我有以下代码:

typedef struct{
    int user_id;
    char username[100];
    char password[25];
} User;
int id = 10001;
User array[50];

...

然后是失败的重要部分(写作和阅读):

FILE *f = fopen("users.dat", "w");
User aux;
int j = 0;


for(int i = 0; i < 50; i++){
                fwrite(&array[i],sizeof(array[i]),1 , f);   
            }
            fwrite(&id, sizeof(id), 1, f);  
fclose(f);
f = fopen("users.dat,"r");
while(fread(&aux, sizeof(aux), 1, f)){
        array[j++] = aux;
    }
    fread(&id, sizeof(id),1 ,f);

有人可以解释一下为什么这不起作用? AKA为什么它正在读取所有用户,但它没有读取ID。我已经尝试使用int来计算用户数量并仅打印这些用户,但它不能正常工作。 感谢您的帮助,如果需要,我会发布更多代码。

1 个答案:

答案 0 :(得分:2)

你的第二个循环

while(fread(&aux, sizeof(aux), 1, f))

将读取id - 移动到文件末尾,因此以下读取将失败。

如果您保存到文件中有多少用户记录要回读并循环播放该号码,您可以使其工作。