首页 > 解决方案 > 字数统计程序未从文本文件中检测到双新行

问题描述

好的,只需在 C 中创建一个从 .txt 文件读取的基本字数计数程序,而我只是停留在实际字数计数函数上,没有检测到文件中的双换行符,这是特定的代码位:

while((c = fgetc(file)) != EOF)
{ 
    if(c == ' ')
        count++;

    if(c == '\n')
        count++;

    if (c == '\n\n')
        count--;
}
printf("words = %d\n", count);

所以只有前两个 if 语句有效,第三个不做任何事情,我希望它减少计数器,因为我不希望双换行符算作一个单词。有谁知道解决方案?我已经搜索了一段时间,但没有找到这个特定的问题。

标签: c

解决方案


当您遇到双新行时,\nif在每次迭代中触发第二次读取两次,因为fgetc应该一次只读取一个字符。至于主要问题,通过引入一个额外的标志可以很容易地实现双新行的检测。这种方法可能应该扩展到处理各种单词分隔符。

int was_a_new_line = 1;
while((c = fgetc(file)) != EOF)
{ 
    if(c == '\n')
    {
        if(!was_a_new_line)
        {
             was_a_new_line = 1;
             count++;
        }
    }
    else
    {
        was_a_new_line = 0;
        if(c == ' ')
        {
             count++;
        }
    }
}

推荐阅读