为了账号安全,请及时绑定邮箱和手机立即绑定

而((c = getc(file))!= EOF)循环不会停止执行

而((c = getc(file))!= EOF)循环不会停止执行

C
慕田峪4524236 2019-09-06 16:03:13
我无法弄清楚为什么我的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;

    ...


查看完整回答
反对 回复 2019-09-06
  • 2 回答
  • 0 关注
  • 750 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信