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

#include<stdio.h>#defineNONBLANK'A'main(){intc,lastc;lastc=NONBLANK;while((c=getchar(... #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里面的
展开
 我来答
百度网友72d563a
推荐于2018-05-06 · TA获得超过252个赞
知道小有建树答主
回答量:242
采纳率:0%
帮助的人:309万
展开全部
ctrl+z是产生EOF,也就是你程序结束循环的标志
但是没有ctrl+z并不影响循环中代码的执行呀
你如果只按回车,就会一行字符发送到缓冲区,然后被getchar一个个在循环中读取、输出
直到这一行的最后一个字符读完,程序会等待下一串字符来到缓冲区
只到来到缓冲区的字符中包含ctrl+z,循环终止
懂?
追问
就是按下回车后之前的输入就被读入缓存被getchar读取并且开始执行程序执行了吗?

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

再问个低级问题不想去百度了,就是为什么不能输入-1来结束,是因为不是一个字符吗?
追答
1、字符发生到缓存区有几个可能条件,其中之一就是按回车,还有可能缓冲区以满,至于其他条件可以查查相关资料
2、ctrl+z仅仅是产生eof,仅此而已
3、你指的结束,是指结束什么。如果是结束循环,那完全看循环条件,输入-1同样是可以结束循环的,如果按字符方式解释-1,检查字符‘-’后面紧跟字符‘1’就行了,当然也可以按数字方式解释-1,比如用scanf
百度网友69a04c1d4
2014-10-08
知道答主
回答量:19
采纳率:0%
帮助的人:9.9万
展开全部
回车键不会返回EOF消息 ,回车的ASCII代码16进制是“0x0d” 10进制是“13” 在某些语言中可以用‘\r’表示,所以程序在while里面判断出条件是成立的 当然往下面执行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-10-08
展开全部
http://bbs.csdn.net/topics/350030722 看这个。
int c = 0;给个初始值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式