无法使文件I / 0在周期计数器功能-c中工作

时间:2014-11-18 02:50:06

标签: c file io

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循环中,但我不确定它为什么会这样做。

3 个答案:

答案 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)

有两个问题:

  1. 您有fgetc()两个电话,但您只测试其中一个是否返回了一个点。
  2. 关闭循环体中的文件流。
  3. 你需要更像的东西:

    if ((fp = fopen(filename,"r")) != NULL)
    {
        int c;
        while ((c = fgetc(fp)) != EOF)
        {
            if (c == '.')
                n++;
        }
        fclose(fp);
    }