很抱歉以我的母语开发此程序,但我似乎无法找到它无法正常工作的原因。所以,我测试了并且a数组的值都被正确读取了,但是当我尝试查看.dat文件时,只有for函数中读取的第一个单词(a [0] .marca)。
以下是输入I also tested to see if it reads correct
这是.dat文件It only writes the first
#include <stdio.h>
#include <stdlib.h>
struct data
{
int anul;
int luna;
};
typedef struct data DATA;
struct automobil
{
char marca[20];
char carburant;
char model[5];
DATA fabricatie;
};
typedef struct automobil AUTOMOBIL;
int main()
{
AUTOMOBIL a[100];
int n;
FILE *f;
int i;
if((f=fopen("evidenta.dat","wb"))==NULL)
{
exit(1);
}
printf("Cate automobile sunt ?"); scanf("%d",&n); // The number of cars registered
for(i=0;i<n;i++) // getting the details about every car
{
printf("\nMarca ? : "); fflush(stdin); gets(a[i].marca);
printf("\nCarburant ? : "); fflush(stdin); getch(a[i].carburant);
printf("\nModelul? :"); fflush(stdin); gets(a[i].model);
printf("\nLuna fabricatie ? :"); scanf("%d",&a[i].fabricatie.luna);
printf("\nAn fabricatie ? : "); scanf("%d",&a[i].fabricatie.anul);
// After getting a line it has to write it in the binary file
fwrite(&(a[i]),sizeof(AUTOMOBIL),1,f); //It writes only a[0].marca
}
for(i=0;i<n;i++)
{
printf("\n %s",a[i].marca);
printf("\n %c",a[i].carburant);
printf("\n %s",a[i].model);
printf("\n %d",a[i].fabricatie.luna);
printf("\n %d",a[i].fabricatie.anul);
}
return 0;
}
答案 0 :(得分:0)
这是因为你每次都写第一个项目 - &a
,同时期望写出&(a[i])
。
写入缓冲区后不要忘记fclose
文件,不要丢失。
如果要在写入时查看文件的实时更改,则需要禁用输出缓冲区setbuf(f,NULL)
或将其刷新fflush(f)
。
答案 1 :(得分:0)
你必须这样做:
fwrite(&(a[i]),sizeof(AUTOMOBIL),1,f);
或者你可以在循环之外做到这一点:
fwrite(a,sizeof(AUTOMOBIL),n,f);
另外别忘了fclose。
答案 2 :(得分:0)
正如其他人的回答所说,你需要写信给&a[i]
。如果要查看当前文件的内容,则需要使用setbuf(f, NULL)
禁用输出缓冲区,或者每次使用fflush(f)
写入时刷新它。