我很长一段时间以来一直在努力处理这段代码,我需要一些帮助。我试了很多来解决这个问题,但我的输出总是与我的预期不同。我试图将具有多行的二进制文件转换为文本文件。问题与我的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`,但我的输出仍然是错误的。请问我怎样才能正确地创建一个能够提供所需输出的循环?