鱼C论坛

 找回密码
 立即注册
查看: 27|回复: 1

写了一段代码代码用来统计输入的行数、单词数、字符数,结果总是不对

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下
  1. #include <stdio.h>
  2. #define IN 1
  3. #define OUT 0

  4. int main(void)
  5. {
  6.         int c, nl, nw, nc, state;

  7.         state = OUT;
  8.         nl = nw = nc = 0;
  9.         while ((c = getchar()) != EOF)
  10.         {
  11.                 ++nc;
  12.                 if (c == '\n')
  13.                 {
  14.                         ++nl;
  15.                 }
  16.                 if (c == ' ' || c == '\n' || c == '\t')
  17.                 {
  18.                         state = OUT;
  19.                 }
  20.                 else if (state = OUT)
  21.                 {
  22.                         state = IN;
  23.                         ++nw;
  24.                 }
  25.         }
  26.         printf("\n%d %d %d\n", nl, nw, nc);
  27.         return 0;
  28. }
复制代码

输出结果中字符数没问题,但行数、单词数一直不对
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层
你好!看了你的代码,问题出在单词计数的逻辑上。具体来说,在 else if (state = OUT) 这一行,你误用了赋值运算符 = 而不是比较运算符 ==。这导致 state 被错误地重新赋值,且条件始终为假,因此单词数无法正确增加。

修正方法很简单:将 else if (state = OUT) 改为 else if (state == OUT)。这样,当遇到非空白字符且当前状态为 OUT 时,才会切换到 IN 状态并增加单词数。

以下是修正后的代码:


  1. #include <stdio.h>
  2. #define IN 1
  3. #define OUT 0

  4. int main(void)
  5. {
  6.         int c, nl, nw, nc, state;

  7.         state = OUT;
  8.         nl = nw = nc = 0;
  9.         while ((c = getchar()) != EOF)
  10.         {
  11.                 ++nc;
  12.                 if (c == '\n')
  13.                 {
  14.                         ++nl;
  15.                 }
  16.                 if (c == ' ' || c == '\n' || c == '\t')
  17.                 {
  18.                         state = OUT;
  19.                 }
  20.                 else if (state == OUT)
  21.                 {
  22.                         state = IN;
  23.                         ++nw;
  24.                 }
  25.         }
  26.         printf("\n%d %d %d\n", nl, nw, nc);
  27.         return 0;
  28. }
复制代码


修改后,程序应该能正确统计行数、单词数和字符数。注意,行数统计依赖于换行符的数量,如果输入的最后一行没有换行符,则行数可能少计一行,但这与常见工具(如 wc)的行为一致。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-10 21:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表