首次进入后为什么字符数错了?

时间:2012-05-24 07:17:18

标签: c loops character counting

我在C中编写了一个程序来计算从stdin输入的字符。我想使用一个循环来允许多个条目。 (注意:我是编程新手。)

main()
{
    long nc;
    int c;
    int kc=1;
    for (kc=1;kc<=5;kc=kc+1)
    {
        nc=0;
        c= getchar();
        while(c != '0')
        {

        ++nc;
        c=getchar();
        }

        printf("%1d\n",nc);

    }
    return 0;
}

所以基本上你猜测,循环接受5个条目。

问题:当我输入Sky0时,第一个结果是正确的,但是从那时起,一个被添加到计数中。即输入dame0结果计为5sit0计算结果为4等。

在尝试使用prinf在各个阶段调试问题时,我意识到在第一个结果之后代码找到输入的结尾0,但是进入for循环NEVERTHELESS并等待下一个条目nc1。这导致相应输出中的错误。

请告诉我哪里出错了?为什么即使在感知0

之后它也会进入循环

非常感谢您的帮助和时间:)

1 个答案:

答案 0 :(得分:2)

问题在于当你按下回车键时,它也会成为一个字符(值为0x1a),并且会在while循环之外的getchar调用中返回。

您可以执行以下操作:

while (getchar() != '\n') nc++;

这样你甚至不需要使用0来标记字符串的结尾。