int periodCount(const char *filename) {
FILE * fp;
int n = 0;
if( (fp=fopen(filename,"r")) != NULL) {
while(fgetc(fp)!= EOF) {
if(fgetc(fp)=='.') n++;
fclose(fp);
}
}
return n;
}
这是我的代码,它应该只计算名为filename的文件中的句点数,其中包含15个句点,但当我尝试在程序结束时打印'n'时,它似乎只是读取1期间。我知道问题可能在while循环中,但我不确定它为什么会这样做。
答案 0 :(得分:2)
您正在关闭第一个字符后的文件。此外,由于未存储来自fgetc()
的回报,您正在跳过其他所有字符。改为:
int periodCount(const char *filename) {
FILE * fp;
int n = 0, c = 0;
if( (fp=fopen(filename,"r")) != NULL) {
while( (c = fgetc(fp)) != EOF) {
if( c == '.' )
n++;
}
fclose(fp); /* <---- move this line here */
}
return n;
}
答案 1 :(得分:1)
您的fclose(fp)
应该在while
循环之外。
实际上,代码正在读取(和丢弃)第一个字符;阅读第二个角色&amp;将其与'.'
进行比较;并关闭文件。
答案 2 :(得分:0)
有两个问题:
fgetc()
两个电话,但您只测试其中一个是否返回了一个点。你需要更像的东西:
if ((fp = fopen(filename,"r")) != NULL)
{
int c;
while ((c = fgetc(fp)) != EOF)
{
if (c == '.')
n++;
}
fclose(fp);
}