九歌当下 发表于 2026-4-10 19:00:37

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

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

int main(void)
{
      int c, nl, nw, nc, state;

      state = OUT;
      nl = nw = nc = 0;
      while ((c = getchar()) != EOF)
      {
                ++nc;
                if (c == '\n')
                {
                        ++nl;
                }
                if (c == ' ' || c == '\n' || c == '\t')
                {
                        state = OUT;
                }
                else if (state = OUT)
                {
                        state = IN;
                        ++nw;
                }
      }
      printf("\n%d %d %d\n", nl, nw, nc);
      return 0;
}
输出结果中字符数没问题,但行数、单词数一直不对

FishC 发表于 2026-4-10 19:01:39

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

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

以下是修正后的代码:


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

int main(void)
{
      int c, nl, nw, nc, state;

      state = OUT;
      nl = nw = nc = 0;
      while ((c = getchar()) != EOF)
      {
                ++nc;
                if (c == '\n')
                {
                        ++nl;
                }
                if (c == ' ' || c == '\n' || c == '\t')
                {
                        state = OUT;
                }
                else if (state == OUT)
                {
                        state = IN;
                        ++nw;
                }
      }
      printf("\n%d %d %d\n", nl, nw, nc);
      return 0;
}


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

ltyw8006@163.co 发表于 6 天前

一天发10万论坛广告群发软件--视频教程--点击播放
https://cloud.video.taobao.com/vod/kOAK4RQLF2WlUe2QNReX5hkymKnZ4pHc4cTtllOER0U.mp4
日发20万QQ邮箱--视频教程-点击播放--联系微信:rj8003002--客服QQ-2775416944--论坛群发软件
https://img.alicdn.com/imgextra/i2/1055339560/O1CN015UzyZN2KUXWQoHksa_!!1055339560.jpg

ltyw8006@163.co 发表于 6 天前

一天发10万论坛广告群发软件--视频教程--点击播放
https://cloud.video.taobao.com/vod/kOAK4RQLF2WlUe2QNReX5hkymKnZ4pHc4cTtllOER0U.mp4
日发20万QQ邮箱--视频教程-点击播放--联系微信:rj8003002--客服QQ-2775416944--论坛群发软件
https://img.alicdn.com/imgextra/i2/1055339560/O1CN015UzyZN2KUXWQoHksa_!!1055339560.jpg
页: [1]
查看完整版本: 写了一段代码代码用来统计输入的行数、单词数、字符数,结果总是不对