You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

修正说明

  1. 改用isspace函数判断空白字符,它能识别空格、换行、制表符等所有空白类型,比单独判断更全面。
  2. 新增in_word变量跟踪状态:只有当从空白字符切换到非空白字符时,才增加单词计数,避免连续空白重复统计,同时也能正确统计最后一个没有尾随空白的单词。
  3. 移除了未使用的ptr和size变量,精简代码。
  4. 修复了初始fgetc调用导致的第一个字符丢失问题。

内容的提问来源于stack exchange,提问作者quench

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:33:31