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

问题描述:

我有以下代码:如何从C中的二进制文件中读取两种不同的数据类型?

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数来计算用户数量,只打印这些数据,但它没有工作。 感谢您的帮助,如果需要,我会发布更多的代码。

+0

有什么不适用于它?什么是写入文件? –

+0

这是你正在尝试的实际代码吗?你已经打开一个文件'f'来阅读。然后你写信给你。阅读和重新打开之间关闭?确保你打开写入开始 – doctorlove

+0

嗯,我设法读取所有50个用户,但int ID的读取返回0(未读取)。 –

你的第二个环

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

将读取的ID - 移动到文件的末尾,所以下面的内容将会失败。

如果您保存到该文件有多少用户记录回读和循环该号码,你可以让它工作。

+0

所以,按顺序: 1 - 保存数组长度 2 - 保存所有用户 3 - 保存ID 对不对? –

+0

确实。除非50总是会是50. – doctorlove

+0

它完美运作。感谢您的帮助,欢呼! –