{
char c;
while ((c=getchar())!='/n') /*每个 getchar()依次读入一个字符*/
printf("%c",c); /*按照原样输出*/
printf("/n/n");
}
程序运行时,首先停下来,等你输入一串字符串,输入完毕后,它把你输入的整个字
符串都输出来了,咦,你不是说 getchar()只返回第一个字符么,这里怎么?
因为我们输入的字符串并不是取了第一个字符就把剩下的字符串丢掉了,它还在我们
的内存中,好比,开闸放水,我们把水放到闸里去以后,开一次闸就放掉一点,开一次就
放掉一点,直到放光了为止,这里开闸动作就相当于调用一次 getchar()。我们输入的字符
串也是这么一回事,首先我们输入的字符串是放在内存的缓冲区中的,我们调用一次
getchar()就把缓冲区中里出口最近的一个字符输出,也就是最前面的一个字符输出,输出
后,就把它释放掉了,但后面还有字符串,所以我们就用循环把最前面的一个字符一个个
的在内存中释放掉,直到不满足循环条件退出为止。
例子中循环条件里的'/n'实际上就是你输入字符串后的回车符,所以意思就是说,直到
遇到回车符才结束循环,而 getchar()函数就是等待输入(或缓冲区中的数据)直到按回车
才结束,所以实现了整个字符串的输出。当然,我们也可以把循环条件改一下,比如 while
((c=getchar())!='a'),什么意思呢,意思就是遇到字符'a'就停止循环,当然意思是如果你输
入“12345a213123/n”那么只会输出到 a,结果是 12345a。
再次注意:用 getchar()它是从“流”中间去读取,所以第一个 getchar()接受的是刚刚中
断的流队列中即将出列的第一个字符(不限于回车符,上面举过例子了),如果流队列不
为空,执行 getchar()就继续放水,直到把回车符也放空为止,空了之后再在执行 getchar()
就停下等待你的输入了;我们用 getch()为什么每次都是等待用户的输入呢?因为 getch()
是从键盘接收,即时的接收,并不是从 stdin 流中去读取数据。
补充:按键盘上的回车产生了 2 个字符:回车符('/r')和换行符('/n')。回车符'/
r'(CR:carriage return:倒车)使光标回到这行的首部,换行符('/n')(new line)然后再换行。
所以当输入字符'w',并按下回车键以后。首先得到回车符。那个 getchar 函数结束了。
但是还存在一个换行符。所以如果用 getchar()来做判断的时候。最好再写一次 getchar()清
除缓冲区的'/n'.
如何清空输入缓冲区的内容?
评论0
最新资源