从键盘填充后从二进制文件中获取损坏的数据

时间:2018-03-04 05:32:43

标签: c windows

我在下面编写了这段代码,用于在实现之前测试项目之外的概念。

在从键盘填充struct变量之后,它会被写入二进制文件,并且该过程将继续尽可能地为文件提供足够的行。

然后我有另一个函数从文件中读取数据并将其打印到屏幕下到最后一行,但是当我打印出数据时,我得到了损坏的数据。所有输入都已损坏。

请帮忙。

CODE:

#include <stdio.h>
#include<string.h>


typedef struct ParkingInfo{
  int slot;
  char status[10];
  char clientCat[10];
  char owner[15];
}PARK;

PARK info;
int lengthBuffer_ = 250;

void populateFile();
void readFile();

int main(){
    populateFile();
    readFile();
}

void populateFile(){
    /*Variables*/
    FILE* fp = fopen("ParkingInfo.bin","wb+");
    PARK pk;

    if(fread(&pk,sizeof(PARK),1,fp)==0){//encounters EOF
        pk.slot=0;
        // will write to file {Slot# OPEN null null}
        for(int i=0;i<lengthBuffer_;i++){
            printf("Enter slot status: \n");
            fgets(pk.status,sizeof(pk.status),stdin);
            printf("Client category:\n");
            fgets(pk.clientCat,sizeof(pk.clientCat),stdin);
            printf("Owner Name: \n");
            fgets(pk.owner,sizeof(pk.owner),stdin);

            pk.slot++;
            fwrite(&pk,sizeof(PARK),1,fp);
        }
    }else{
        printf("FILE has content\n");
    }
    fclose(fp);
}

void readFile(){
    FILE* fp = fopen("ParkingInfo.bin","rb");
    PARK park;

    for(int i=0;i<lengthBuffer_;i++){
        fread(&park,sizeof(PARK),1,fp);
        printf("%i\t%s\t%s\t%s\n",park.slot,park.status,park.clientCat,park.owner);
    }
}

(编辑):输出看起来像:

4201152 α■a     a       ■   èj╨t}k╨t└@
4201152 α■a     a       ■   èj╨t}k╨t└@
4201152 α■a     a       ■   èj╨t}k╨t└@
4201152 α■a     a       ■   èj╨t}k╨t└@
4201152 α■a     a       ■   èj╨t}k╨t└@
4201152 α■a     a       ■   èj╨t}k╨t└@
4201152 α■a     a       ■   èj╨t}k╨t└@
4201152 α■a     a       ■   èj╨t}k╨t└@
4201152 α■a     a       ■   èj╨t}k╨t└@
4201152 α■a     a       ■   èj╨t}k╨t└@
4201152 α■a     a       ■   èj╨t}k╨t└@

编辑:

readFile函数中的read方法替换为:

while(fread(&park,sizeof(PARK),1,fp)!=0){
        printf("%i\t%s\t%s\t%s\n",park.slot,park.status,park.clientCat,park.owner);
    }

它现在什么都不打印

0 个答案:

没有答案