我无法弄清楚为什么我的while循环不起作用。代码在没有它的情况下正常工作......代码的目的是在bin文件中查找秘密消息。所以我得到了代码来查找字母,但现在当我尝试将其循环到文件末尾时,它不起作用。我是新来的。我究竟做错了什么?main(){FILE* message;int i, start;long int size;char keep[1];message = fopen("c:\\myFiles\\Message.dat", "rb");if(message == NULL){ printf("There was a problem reading the file. \n"); exit(-1);}//the first 4 bytes contain an int that tells how many subsequent bytes you can throw awayfread(&start, sizeof(int), 1, message);printf("%i \n", start); //#of first 4 bytes was 280fseek(message, start, SEEK_CUR); //skip 280 byteskeep[0] = fgetc(message); //get next character, keep itprintf("%c", keep[0]); //print characterwhile( (keep[0] = getc(message)) != EOF) { fread(&start, sizeof(int), 1, message); fseek(message, start, SEEK_CUR); keep[0] = fgetc(message); printf("%c", keep[0]);}fclose(message);system("pause");}编辑:在调试器中查看我的代码后,看起来在while循环中使用“getc”会将所有内容都抛弃。我通过创建一个名为letter的新char来修复它,然后用以下代码替换我的代码:fread(&start, sizeof(int), 1, message);fseek(message, start, SEEK_CUR);while( (letter = getc(message)) != EOF) { printf("%c", letter); fread(&start, sizeof(int), 1, message); fseek(message, start, SEEK_CUR);}它现在就像一个魅力。当然,欢迎提出更多建议。感谢大家。
2 回答
一只甜甜圈
TA贡献1836条经验 获得超5个赞
有256个不同的char值可以返回getc()并存储在char变量中keep[0](是的,我疯狂地过度使用)。要可靠地检测文件结尾,EOF必须具有与所有文件不同的值。这就是为什么getc()返回int而不是char:因为第257个不同的值EOF不适合a char。
因此,你需要存储返回的值getc()中的int至少直到你选择了它反对EOF:
int tmpc;
while( (tmpc = getc(message)) != EOF) {
keep[0] = tmpc;
...
- 2 回答
- 0 关注
- 750 浏览
添加回答
举报
0/150
提交
取消