为什么第一次进入后人物的数字会出错?

我用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 时,第一个结果是正确的,3。但是从那时起,一个被添加到计数中。那就是输入 dame0 的结果是计数 5sit0 的结果是计数为 4 等。

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

请告诉我哪里出错了?为什么即使在检测到 0 之后它又进入了循环?

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

0
额外 编辑
意见: 1
hmjd:谢谢你!...是的,我纠正了它,一个非零的专业方式终于是新的...欣赏时间:)
额外 作者 Aki,
prasad g:不清楚队友...
额外 作者 Aki,
关:希望是prasad g :)
额外 作者 Aki,
for循环的每次迭代中, nc 被设置为 0 。当字符字符串'0'被发现时, while 循环将被终止。我查看了@aix所述的内容,这是正确的,请参阅我所做的 ideone.com/gw1ON 。它显示了换行符是后续输入的一部分。
额外 作者 hmjd,
是否有可能c =='0'?当c =='0'时,while循环将被终止。我每次都得到c = -1。
额外 作者 Prasad G,
你在说俚语吗?请在编写问题和缩进代码时做出一些努力。其他人不会浪费时间阅读它。
额外 作者 Seki,

1 答案

问题是,当你按回车时,它也会变成一个字符(值为0x1a),并且它是由while循环外的 getchar 调用返回的。

你可以做一些事情:

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

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

0
额外
是的,我纠正了它的队友:))... thnks :)
额外 作者 Aki,
Ohk ... new here:)...会做...
额外 作者 Aki,