【问题标题】:Word Counting program not producing desired output字数计数程序未产生所需的输出
【发布时间】:2018-06-04 20:41:07
【问题描述】:

我指的是学习 C 的 K&R。我没有得到以下代码所需的输出。

#include <stdio.h>
#define IN 1
#define OUT 0
main()
{
    int c,nl,nw,nc, state;
    nl = nc = nw = 0;
    state = OUT;
    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("%d %d %d", nc, nw,nl);
}

我给出了以下输入

the
door is
open

我得到的输出是

17 1 0

请告诉我代码有什么问题。

【问题讨论】:

  • 你尝试调试了吗?
  • '(c=getchar()!= EOF)' --> '(c=getchar())!= EOF'
  • 启用编译器警告,gcc 上-Wall -Wextra,clang 上-Weverything 或VS 上/Wall (cl.exe) 并且在编译之前不接受代码警告。
  • 但是你没有说程序应该做什么。

标签: c word-count


【解决方案1】:

c=getchar()!= EOF 是错误的。这将首先调用函数getchar()。然后它将返回值与EOF 进行比较。之后,比较的结果(1 或 0)将分配给c

为避免这种情况,请使用(c=getchar()) != EOF instad。

使用 if(isspace(c)) 代替第二个 if 语句(感谢 Lundin 指出)

您还应该指定 main 应该返回一个 int 以避免警告。

【讨论】:

  • 或使用 ctype.h 中的isspace()
  • @Lundin True。谢谢。修好了。
  • 这会将连续的空格算作单词。 OP 的状态变量涵盖了这种情况
  • 并且将c 声明为char 是不行的。 getchar() 返回 int,以区分 EOF 和 char 255(或 -1,如果有符号)
  • @king_nak 我想我需要睡觉了。全脑冻结。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
相关资源
最近更新 更多