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

我无法弄清楚为什么我的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 away

fread(&start, sizeof(int), 1, message);

printf("%i \n", start); //#of first 4 bytes was 280

fseek(message, start, SEEK_CUR); //skip 280 bytes

keep[0] = fgetc(message); //get next character, keep it

printf("%c", keep[0]); //print character


while( (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);

}

它现在就像一个魅力。当然,欢迎提出更多建议。感谢大家。


慕田峪4524236
浏览 751回答 2
2回答

一只甜甜圈

有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;    ...
打开App,查看更多内容
随时随地看视频慕课网APP