从二进制文件读取到确定EOF时输出错误

时间:2017-02-12 10:26:59

标签: c while-loop text-files binaryfiles

我很长一段时间以来一直在努力处理这段代码,我需要一些帮助。我试了很多来解决这个问题,但我的输出总是与我的预期不同。我试图将具有多行的二进制文件转换为文本文件。问题与我的while循环有关,因为删除while循环并使用只有一行的文件运行代码可以完美地工作。我的代码如下:

void binaryToText(char *inputFile, char *outputFile){

int sID; 
float gpa;
char firstName[256], lastName[256];
unsigned char firstNameLen, lastNameLen;

FILE *finp = fopen(inputFile, "rb");
FILE *fout = fopen(outputFile, "w");

if((finp != NULL)&&(fout != NULL)){

while(!feof(finp)){
    fread(&firstNameLen, 1, 1, finp);
    fread(firstName, firstNameLen, 1, finp);
    firstName[firstNameLen] = '\0';
    fread(&lastNameLen, 1, 1, finp);
    fread(lastName, lastNameLen, 1, finp);
    lastName[lastNameLen] = '\0';
    fread(&sID, 4, 1, finp);
    fread(&gpa, 4, 1, finp);
    fprintf(fout, "%s %s %d %1.1f\n", firstName, lastName, sID, gpa);
    }
}
fclose(finp);
fclose(fout);
}

我的输出应该是这样的:

mary smith 1 3.9
george washington 2 4.0
james bond 7 3.2

feof的输出是:

mary smith 1 3.9
george washington 2 4.0
james bond 7 3.2
james bond 7 3.2

我尝试使用fread形式'while(nmemb ==(nret = fread(str,sizeof * str,nmemb,finp)))!= NULL`,但我的输出仍然是错误的。请问我怎样才能正确地创建一个能够提供所需输出的循环?

0 个答案:

没有答案