Fwrite无法正常工作

时间:2016-01-27 17:33:25

标签: c

很抱歉以我的母语开发此程序,但我似乎无法找到它无法正常工作的原因。所以,我测试了并且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;

}

3 个答案:

答案 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)写入时刷新它。