2 tkk13 tkk13 于 2016.03.01 10:47 提问

C语言getchar()为什么无法读取ungetch()返回的缓存字符

在看K&R的逆波兰算法,发现里面用getch,把它改成getchar后发现无法读取ungetch返回缓冲区的字符而是直接读取下一个字符了。测试了一下
main()
{
int a,b,c;
a=getchar();
ungetch(a);
putchar(getchar());
while(1);
}
输入23后发现返回的是3.
ungetch返回的不是缓存吗,怎么读取不了呢?

3个回答

hikarisamax
hikarisamax   2016.03.01 11:17

看了这段代码,深深地感觉自己学艺不精

github_27756899
github_27756899   2016.03.02 14:48

main()
{
int a,b,c;
a=getchar(); //a=2;
ungetch(a); //32
putchar(getchar()); //3
putchar(getchar());//2 添加这句可能输出就为2
while(1);
}

github_27756899
github_27756899   2016.03.03 15:44

不好意思,上面回答时没有验证。

图片说明

Relative link 参考网页

Description
_ungetch function puts the character c back into keyboard buffer, so that c will be the next character read by _getch or _getche. _ungetch can be called only once before the next read.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
getch( )与ungetch( )两个函数有什么用途呢?
程序中往往回出现这样的情况:程序不能确定它已经读入的输入是否足够,除非超前多读入一些输入。 例如,把读入一些字符以合成一个数字的情况:看到一个非数字字符之前,已经读入的数的完整性是不能确定的。由于程序要超前读入一个字符, 这样就导致最后有一个字符不属于当前所要读入的数。 如果能“反读”不需要的字符,该问题就可以得到解决。每当程序多读入一个字符时,就把它压回到输入中,对代码其余部 分而言就好
C语言getchar函数
在看C程序设计语言,顺便跑了一下书上的例子         int c; while((c=getchar())!=EOF) { //printf("this is a test"); putchar(c); //putchar('\n'); } 想为什么只有遇到回车后 才输出呢 查了一下,应该和语言设计 和计算机处理有关吧  下面收集了 一点资料 对于计算机而言,在取输
关于C语言中为什么getchar的返回类型不是char而是int的说明
关于C语言中为什么getchar的返回类型不是char而是int的说明 来自:C语言程序设计类资料 C语言中对getchar的描述为: int getchar(void) 按理应用返回值应用char,但为了包含EOF,char就装不下,就用了更大的int来装。
【C语言】getchar单个字符依次输入(可对单个字符进行处理)
【Getchar知识点】1.从缓冲区读走一个字符,相当于清除缓冲区2.前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n’(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误3.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)g
[C陷阱]getchar的返回值是int而不是char
有如下代码: //char c;//错误 int c;  /* 正确。应该使用 int 型变量接收 fgetc 的返回值 */          while ( (c = getchar()) != EOF )          {              putchar(c);          }getchar 等函数的返回值类型都是 int 型,当这些函数读取出错或者读完文件后,会返
C语言中getch()与getchar()
getch getch函数在C语言中使用时需包含的头文件为 conio.h ,应写为#include 函数原型为:int getch(void); getch的功能:从标准输入设备(键盘)读入一个字符,不回显在显示器上.  getch函数的使用例程  # include  # include  # include  int main() {     char
结合C语言缓冲区谈getchar()、getche()、getch()
《C语言从键盘输入数据》一节讲到了 getchar()、getche()、getch() 函数,它们都用来从控制台获取字符,getchar() 会等待用户按下回车键才开始读取,而 getche()、getch() 会立即读取。这是因为 getchar() 带有缓冲区,用户输入的数据会暂时保存到缓冲区,直到按下回车键才开始读取;而 getche()、getch() 不带缓冲区,只能立即读取。
【C语言】getchar函数的控制台输入原理,回车符的处理
getchar函数的功能是从输入流读取一个字符,这是我们要明确的就是: 我们在控制台需要输入至少两个字符才能保证这个函数的执行: 例如: 源程序: char ch; ch = getchar(); 我们需要在标准输入流里面输入   ”w 回车“,就是需要至少输入两个字符,一个是接受的正常字符,另一个就是回车换行符,这个回车符的作用就有些像触发器,只要输入了回车符源程序就会进行一次执行,
c语言getchar()接收字符函数如何结束
int main(int argc, char* argv[]) {  double nc;  for(nc=0;getchar()!=EOF;nc++)   ;  printf("%f",nc);  return 0; } 当我们输入字符
getchar从字符串逐个读取字符
int main() {     char p;     while(p=getchar()!='\n')         printf("%c\n",p);     return 0; } 优先级从右向左 getchar()!='\n'本身是一个条件判断语句  那么它只有两种值  0、1 所以p的赋值不是getchar()而是0或者1