关于C语言getchar()读取字符的问题

我一直没明白缓冲输入到底是什么意思,比如输入一个数再回车,getchar()还把最后的回车读入了。比如下面的程序
#include<stdio.h>
char get(void);
int main(void)
{
char ch;
ch=get();
printf("%c",ch);
return 0;
}
char get(void)
{
int ch;
ch=getchar();
while((ch<'a'||ch>'c')&&ch!='q')
{
printf("^^&&&\n");
ch=getchar();
}
return ch;
}
如果输入e,回车,则输出是
^^&&&
^^&&&
我的问题是,getchar读的不是第一个字符e么?难道读完第一个e后,自动又读下一个字符回车了?
那岂不是getchar都可以当读入字符串用了,那跟gets()的功能岂不是差不多了?求大神指点下

回车本身也是一个字符,你对ASCII码不熟呀!getchar得到的是键盘流字符,你须要清除一下键盘缓冲区:如用fflush(stdin); rewind(stdin);等追问

我知道回车也是字符,但是getchar不是读入一个字符么?为啥连后面的字符也读入了呢?流到底是什么意思?教材上也讲流了,但没说啥是流...

追答

你那个不是循环吗?第二个字符也循环了呀。

追问

ch=getchar(),不是把第一个字符赋给ch么....怎么把第二个字符也给ch的....

追答

当你输入一个字符e ,再按一下回车,是不是按了两个字符 ,当第一个e字符读取后,是不是还要读取一个字符再循环,你连while循环都没有搞明白呀!

追问

您的意思是getchar一次后,这个字符就从缓冲区里被读走了,再getchar时,就又从缓冲区里读下一个字符了是吧?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-24
你输入了第一个字符‘e’符合while的条件 ch>'c'&&ch!='q'

所以程序输出"^^&&&\n"
第二个换行符‘\n'被getchar( )吃掉
程序有输出一次"^^&&&\n"
如果你输入'a'~'c'
程序会返回输入值
相似回答