c语言中while ((c = getchar()) != EOF)在这里为什么是输入回车就有输出了

#include<stdio.h>

#define NONBLANK 'A'

main()
{
int c, lastc;

lastc = NONBLANK;
while ((c = getchar()) != EOF) {
if (c != ' ')
putchar(c);
if (c == ' ')
if (lastc != ' ')
putchar(c);
lastc = c;
}
}

不应该是可以输入很多行然后在起一行ctrlz + 回车才会输出吗?
是我对getchar()理解有误还是什么原因啊
这段程序是c程序设计语言K&R练习1-9里面的

ctrl+z是产生EOF,也就是你程序结束循环的标志
但是没有ctrl+z并不影响循环中代码的执行呀
你如果只按回车,就会一行字符发送到缓冲区,然后被getchar一个个在循环中读取、输出
直到这一行的最后一个字符读完,程序会等待下一串字符来到缓冲区
只到来到缓冲区的字符中包含ctrl+z,循环终止
懂?追问

就是按下回车后之前的输入就被读入缓存被getchar读取并且开始执行程序执行了吗?

来到缓冲区的字符不是要单独一行的ctrl+z 回车才会终止么

再问个低级问题不想去百度了,就是为什么不能输入-1来结束,是因为不是一个字符吗?

追答

1、字符发生到缓存区有几个可能条件,其中之一就是按回车,还有可能缓冲区以满,至于其他条件可以查查相关资料
2、ctrl+z仅仅是产生eof,仅此而已
3、你指的结束,是指结束什么。如果是结束循环,那完全看循环条件,输入-1同样是可以结束循环的,如果按字符方式解释-1,检查字符‘-’后面紧跟字符‘1’就行了,当然也可以按数字方式解释-1,比如用scanf

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-08
回车键不会返回EOF消息 ,回车的ASCII代码16进制是“0x0d” 10进制是“13” 在某些语言中可以用‘\r’表示,所以程序在while里面判断出条件是成立的 当然往下面执行了
第2个回答  2014-10-08
看这个。
int c = 0;给个初始值

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网