getchar正在打印额外的输出

时间:2015-12-28 16:56:33

标签: c

root@ubuntu:~/DH$ cat E1-6.c 
#include<stdio.h>
main()
{
    int c;
    while(c = (getchar() != EOF)) {
        printf("HI: %d",c);
        //putchar(c);
    }
}
root@ubuntu:~/DH$ cc E1-6.c
root@ubuntu:~/DH$ ./a.out 
1
HI: 1HI: 1

我使用键盘输入为1,但在输出中显示两次。有人可以解释一下这里发生了什么吗?

3 个答案:

答案 0 :(得分:6)

发生错误的原因是,正如评论所指出的那样,“1”是一个键,“输入”按下1后(或 Ctrl - D for { {1}})是另一个关键。至于为什么两个都打印出“1”,这是因为你将EOF设置为c的布尔(真/假)值。我认为你想要的是

getchar() != EOF
如果你的循环在顶部

。这会将按下的键保存到while ((c = getchar()) != EOF) ,然后检查EOF。

答案 1 :(得分:2)

您的while声明无效。尝试使用输入“2”运行程序,我想你会得到一个有趣的结果。

您的输入是字符1,后跟换行符\n,然后是EOF。第一次调用getchar会返回11不是EOF,所以c = 1。第二个调用返回\n\n不是EOF,所以再次c = ('\n' != EOF),这意味着c = 1

尝试改为:

while((c = getchar()) != EOF) {

答案 2 :(得分:0)

我认为

while(c = (getchar() != EOF)) {

应该是

while((c = getchar()) != EOF) {

因为c不应分配给比较,而应分配给getchar

的返回值