如何从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数来计算用户数量,只打印这些数据,但它没有工作。 感谢您的帮助,如果需要,我会发布更多的代码。
你的第二个环
while(fread(&aux, sizeof(aux), 1, f))
将读取的ID - 移动到文件的末尾,所以下面的内容将会失败。
如果您保存到该文件有多少用户记录回读和循环该号码,你可以让它工作。
所以,按顺序: 1 - 保存数组长度 2 - 保存所有用户 3 - 保存ID 对不对? –
确实。除非50总是会是50. – doctorlove
它完美运作。感谢您的帮助,欢呼! –
有什么不适用于它?什么是写入文件? –
这是你正在尝试的实际代码吗?你已经打开一个文件'f'来阅读。然后你写信给你。阅读和重新打开之间关闭?确保你打开写入开始 – doctorlove
嗯,我设法读取所有50个用户,但int ID的读取返回0(未读取)。 –