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,但在输出中显示两次。有人可以解释一下这里发生了什么吗?
答案 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
会返回1
,1
不是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