2002年计算机2级C考试中有这样2道题目

来源:百度知道 编辑:UC知道 时间:2024/06/14 16:21:37
1、#include "stdio.h"
main()
{FILE *fp;long num=0L;
if((fp=fopen("fname.dat","r"))==NULL)
{printf("Open error\n");exit(0);
while(!feof(fp))
{fgetc(fp);num++;}
printf("num=%ld\n",num-1);
fclose(fp);
}
2、main()
{char c[]="abcdef";
int n;
int mystrlen(char *str);
n=mystrlen(c);
printf("%d",n);
}
int mystrlen(char *str)
{int i;
for(i=0;*(str+i)!='\0';i++);
return(i);
}
我思考了很久没弄明白,同样是计算字符个数为什么第一题要NUM-1,而第二题则是直接取I

因为第一题中!feof()是在读到文件结尾时才会停止,具体你看feof定义,并不是读到‘\0’时就结束,所以当他检测到'\0'时它会继续执行,所以sum又加了一次1,实际字符长是sum-1
第二题中条件是读到\0就不读了,所以是实际字符长