c语言统计文件中字符的个数

main()
{
FILE *fp;long num=0;
if((fp=fopen("fname.dat","r"))==NULL){
exit(0);
}
while(!feof(fp)){
fgetc(fp);
num++;
}
printf("文件中的字符个数为:%d",num-1);
fclose(fp);
}

请问大家,为什么num要减1??
如果改成while(fgetc(fp)!=EOF){
num++;
就不存在减1的问题了

while(!feof(fp)){
fgetc(fp);//最后一个收到的是文件结束符号,当然不是字符串的一部分!
num++;//而此处加了1
}
所以最后字符串的长度要减一。

而你修改后,条件先不满足,不进入循环了,没有num++的动作。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-01
no
它减一,不是为了减到字符串的长度,是为了减去多余的 -1
如果你把它改成
fgetc(fp);
while(!feof(fp)){
fgetc(fp);
num++;
}
就不会错了
如果你不知道是为什么,你可以试一试用你的办法输出文本,你会发现,它最后会多出一个空格出来,减的就是这个空格(其实是这个空格是 -1)
相似回答