使用getchar()计算用户输入的数量会得到预期结果的两倍,为什么?

时间:2016-09-14 18:46:25

标签: c loops getchar

在下面的例子中,从“C编程”一书中,当输入字符时,程序计数两次。

main(){

long nc;

nc = 0;
while (getchar() != EOF)
    ++nc;
    printf("%ld\n", nc);
}

输出:

a
b
c
d
e
f
12

怎么了?

我正在使用Ubuntu和gcc编译器。

1 个答案:

答案 0 :(得分:5)

它正确计数。 for正在考虑按 ENTER 键,作为换行符import yagmail yag = yagmail.SMTP(host="127.0.0.1") yag.send(to"rajiv@domain.com", subject="subject", contents="content") 。所以6 用户输入和6个换行符。计数匹配。

如果您不希望新换行计为输入,则需要在getchar()返回值不是\n时递增计数器,像

getchar()

将完成工作。请注意,\n应为while ( (c = getchar()) != EOF) { if ( c != '\n') ++nc; } 类型,以便能够处理c

根据intEOF,对于托管环境,C99的签名至少应为C11以符合标准。