Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C中的二进制文件中读取两种不同的数据类型?_C_Fwrite_Fread - Fatal编程技术网

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

如何从C中的二进制文件中读取两种不同的数据类型?,c,fwrite,fread,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”); 用户辅助; int j=0; 对于(int i=0;i

我有以下代码:

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

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

FILE*f=fopen(“users.dat”,“w”);
用户辅助;
int j=0;
对于(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)){
数组[j++]=aux;
}
fread(&id,sizeof(id),1,f);
有人能解释一下为什么这不起作用吗?也就是为什么它读取所有的用户,但不读取id。我试着用一个整数来计算用户的数量,只打印这些用户,但它也不起作用。 感谢您的帮助,如果需要,我将发布更多代码。

您的第二个循环

while(fread(&aux, sizeof(aux), 1, f))
将读取id-移动到文件末尾,因此以下读取将失败

如果您将要读取的用户记录数保存到文件中,并循环该数字,则可以使其工作。

您的第二个循环

while(fread(&aux, sizeof(aux), 1, f))
将读取id-移动到文件末尾,因此以下读取将失败


如果您将要读回的用户记录数保存到文件中,并循环该数字,则可以使其工作。

什么不起作用?写入文件的内容是什么?这是您正在尝试的实际代码吗?您已打开一个文件
f
进行读取。然后写入该文件。请在读取和重新打开之间关闭?确保打开的文件是w首先,我设法读取所有50个用户,但读取int id返回0(未读取)。第二个
,而
将读取一些id并到达文件的结尾…不@doctorlove,我编辑了一点,在原始代码中,我正在像我应该的那样打开和关闭。什么不起作用?写入文件的是什么?这是您正在尝试的实际代码吗?您已经打开了一个文件
f
,以供阅读。然后,您可以使用rite to。在读取和重新打开之间关闭?请确保从开始时打开以进行写入。好的,我可以读取所有50个用户,但读取int id返回0(未读取)。第二个
,而
将读取一些id并到达文件的结尾…不@doctorlove,我编辑了一点,在原始代码中,我正在像我应该的那样打开和关闭。因此,按顺序:1-保存数组长度2-保存所有用户3-保存id对吗?确实。除非50总是50。按顺序:1-保存数组长度2-保存所有用户3-保存id对吗?确实如此。除非50总是50。