C语言读取TXT文件统计单词数:count变量无法正常递增问题
解决C语言统计文本文件单词数的问题
你的代码存在几个关键问题,导致无法正确统计单词数量:
- 字符比较逻辑错误:你用双引号
" "和换行的字符串字面量来和字符c比较,但双引号包裹的是字符串(本质是指针地址),而c是char类型,两者类型不匹配,永远不会相等,所以count根本不会自增。应该用单引号包裹的字符常量' '(空格)和'\n'(换行)来做比较。 - 丢失第一个字符:进入循环前你调用了一次
c = fgetc(file);,循环里又重新赋值c = fgetc(file),导致文件的第一个字符被跳过,可能会漏掉开头的单词。 - 单词统计逻辑不合理:当前遇到空格或换行就计数的方式,会把连续的空格/换行多次计数,而且如果文件最后一个单词后没有空白字符,就会少统计一个单词。
修正后的代码
#include <stdio.h> #include <stdlib.h> #include <ctype.h> // 用于isspace函数,匹配所有空白字符 int main(void){ char c; int count = 0; int in_word = 0; // 标记当前是否处于单词中,0=不在,1=在 FILE *file = fopen("file.txt", "r"); if (file == NULL){ printf("ERROR 1: TARGET INPUT FILE DOES NOT EXIST, HAS BEEN RENAMED OR HAS BEEN MOVED.\n"); exit(1); } while ((c = fgetc(file)) != EOF){ if (isspace(c)){ // 遇到空白字符,标记为不在单词中 in_word = 0; } else if (!in_word){ // 从非单词状态切换到单词状态,计数加1 count++; in_word = 1; } } fclose(file); printf("Number of words present in given file: %d\n", count); return 0; }
修正说明
- 改用
isspace函数判断空白字符,它能识别空格、换行、制表符等所有空白类型,比单独判断更全面。 - 新增
in_word变量跟踪状态:只有当从空白字符切换到非空白字符时,才增加单词计数,避免连续空白重复统计,同时也能正确统计最后一个没有尾随空白的单词。 - 移除了未使用的
ptr和size变量,精简代码。 - 修复了初始
fgetc调用导致的第一个字符丢失问题。
内容的提问来源于stack exchange,提问作者quench
相关产品推荐
相关产品推荐

