【问题标题】:My C program counts characters incorrectly我的 C 程序错误地计算字符数
【发布时间】:2016-10-06 04:11:33
【问题描述】:

大家好,所以我编写了一些代码来计算用户在控制台中输入的字符,使用 getchar() 和 while 循环,直到输入 EOF 字符,但它增加了 count 它应该的变量。例如,我输入 3 个字符,然后是 EOF 字符(在本例中为 'z'),最后它输出我输入了 6 个字符,如果我输入 4 个字符 + 'z' 则表示 8,如果 5 则表示 10 . 它应该显示 x2 个字符。

#include <stdio.h>
#define END 'z'

int main()
{
    printf("Hello:\n");
    int count = 0;
    int c;

    while ((c = getchar()) != END)
    {
        count++;
    }

    printf("You entered %d charaters.", count);
}

为什么会这样? :/

【问题讨论】:

  • 代码似乎正确。您是在宽字符系统控制台上启动它吗?尝试使用getwchar
  • Couldn't reproduce。您确定您只输入了 3 个字符而没有任何额外的字符,例如换行符吗?另请注意,使用char 存储从getchar() 返回的内容并不好,因为它可能返回EOF,而无法存储到char
  • 您正在输入 1[enter]2[enter]3[enter]z[enter]?
  • c 必须是 int 类型。 getchar() 返回一个 int 类型的值。将该值分配给 char 类型的变量会丢失您可能需要的信息。
  • 请注意,如果您在输入 END 字符之前指示“文件结尾”(在 Unix 上,通过输入 control-D;在 Windows 上,通过输入 control-Z),您的代码将进入无限环形。你应该使用int c;(不是char c;)因为getchar()返回一个int,而不是char,你应该在循环条件中使用while ((c = getchar()) != EOF &amp;&amp; c != END)(或者你可以测试END和EOF以其他顺序)。你至少应该考虑如果你在最不方便的时刻被告知 EOF 会发生什么。

标签: c count character


【解决方案1】:

每次你用 getchar() 输入一个字符,然后按“enter”,你再输入一个字符,它是一个换行符。

while ((c = getchar()) != EOF)
{
    if (c=='\n')
        continue;
    count++;
}

这将解决您的问题。

我已经对您和我的代码进行了一些测试,只是想看看这是否是问题所在。输出在这里:

用你的代码输出:

Hello:
a
s
d
df
You entered 9 charaters.

Hello:
asdf

You entered 5 charaters.

用我的代码输出:

Hello:
a
s
d
f
You entered 4 charaters

【讨论】:

  • @Mirakurun 是的,即使他在每个字符后输入 '\n',您的代码也应该可以工作,但我猜如果没有那个,他会出错。
  • 我没有写错,我写的是目前没有人知道OP是否在其他字符之间按下回车键。
  • 我在没有换行符的情况下检查了他的代码,看起来还可以。我在编辑中发布了输出。 Asdf\n 就是这 5 个字符。
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 2017-07-02
  • 2020-09-16
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
相关资源
最近更新 更多