简单的程序将“D”添加到输出

时间:2009-09-20 04:49:41

标签: c printf

我有一个非常简单的程序,只是将换行符的数量打印为整数,并在每个数字后得到一个“D”。

示例输入:
d [输入]
e [enter]
f [enter]
Ctrl-D [enter]

样品输出:
3D

我做错了什么?

这是C编程语言第2版的逐字记录。 19:

#include <stdio.h>

main()  
{  
    int c, nl;  
    nl = 0;

    while ((c = getchar()) != EOF)  
        if (c == '\n')  
            ++nl;  
    printf("%d\n", nl);  
}

3 个答案:

答案 0 :(得分:4)

我认为D来自Ctrl D.控制台输出^ D作为其标准回声逻辑,然后将相应的char(或者更确切地说缺少char,即EOF状态)传递给getchar(),然而,理所当然,不发送cr / lf。然后C程序发送它的3,等等...

在退出前输入超过9 CR的程序尝试该程序,问题应该“消失”,即不显示。

答案 1 :(得分:2)

将打印行更改为:

printf(“\ n%d \ n”,nl);

然后你会看到当你按下ctrl-d时,你就会得到“^ D”。只是因为你没有按ctrl-D然后按Enter键,所以它不在原始程序的换行符上。并非所有系统都会将ctrl-d回显给您,但它会在OS-X上进行回调。因此,如果您打印一位数字,最终会弄乱输出。你必须解决它。

答案 2 :(得分:0)

对于我来说,无论是输入管道还是手动输入并用^ D完成,这对我来说都很好。

$ ./a.out
1
2
3
3
$ echo -ne "1\n2\n3\n" | ./a.out
3

这可能就像@mjv说的那样,控制台正在回应你的回复< - >你在Windows上,对吗?我认为这对Windows控制台来说是正常的。