我有一个非常简单的程序,只是将换行符的数量打印为整数,并在每个数字后得到一个“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);
}
答案 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控制台来说是正常的。