我的代码在这里
int main(){
FILE *fp;
fp = fopen("dic.txt", "r");
while(getc(fp) != EOF){
if(getc(fp) == ' '){
printf("up ");
}
}
}
我的 dic.txt 在这里
我的预测是“up up up up”
,因为有四个空格“”
但它只打印了一个
什么是问题?
您getc
每次循环迭代调用两次;这两个调用之一将字符与 进行比较EOF
,而另一个调用将字符与 进行比较' '
。
这有两个后果:
"up"
偶数位置的空格,而忽略所有奇数位置的空格;getc
在第一次到达后,您的程序可能会额外调用EOF
一次。怎么修
您需要对循环的每次迭代进行一次调用。getc
将返回的字符保存getc
到局部变量中;然后使用这个变量来检查循环体中的空格,并检查EOF
循环的条件。
你要这个:
#include <stdio.h>
int main() {
FILE* fp;
fp = fopen("dic.txt", "r");
if (fp == NULL)
{
printf("Can't open file\n");
return 1;
}
int ch; // int is needed her, not char !!
while ((ch = getc(fp)) != EOF) { // read one char and check if it's EOF in one go
if (ch == ' ') {
printf("up ");
}
}
}
getc
一次,否则您会跳过两个字符中的一个。fopen
失败。试用此代码:
FILE *fp;
fp = fopen("dic.txt", "r");
int ch = getc(fp);
while(ch != EOF){
if(getc(fp) == ' '){
printf("up ");
}
}
return 0;