我无法弄清楚为什么我的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] = …Run Code Online (Sandbox Code Playgroud) 我的问题只是"为什么第10行和第11行的代码无法正常运行?" 我的代码的目的是完全按照原始的K&R代码进行操作,但不计算nc(getchar()=='\n'),请你启发我吗?
略微修改的K&R代码:
/** K&R - 1.5.2 Character Counting **/
#include <stdio.h>
/* count characters in input; 1st version */
main(){
long nc;
nc = 0;
while (getchar() != EOF){
if (getchar() != '\n'){
++nc;
}
}
printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)
我使用的是64位Windows 7,CodeBlocks10.05,GNU GCC编译器.
我目前的进步和理解:
在示例运行中,我输入单词two并按Enter键,等于4个输入,然后按ctrl + Z输入一个^Z或EOF字符.程序然后打印1.我期待它打印3.我想唯一合乎逻辑的解释是它完全与我的意图完全相反(它只计算换行符?).事实证明,如果我输入单词two并按回车键,可以说4次,它会打印出来4.它似乎在计算nc输入的每个换行符,但是如果我单独输入(在这种情况下为4次)然后按EOF,它总是打印出来0.经过进一步的实验,通过一些看不见的手4可能是这个程序的神奇数字.如果我启动它并完全按下输入键(一个可被4整除的数字)然后打印出EOF 0.但是,如果我输入其他次数输入EOF什么都不做,我必须^Z一个接一个地输入两行,以正确结束while循环,然后打印1.这令人难以置信!