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

问题描述

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

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

解决方案

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

解决方案二:

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

解决方案三:

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

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.

时间: 2025-01-26 22:55:07

测试-C语言getchar()为什么无法读取ungetch()返回的缓存字符的相关文章

c语言-C语言getchar不读取EOF问题

问题描述 C语言getchar不读取EOF问题 各位前辈,我的问题是,当我调试下面的c程序的时候,有一个不懂的地方在于: 右边输入了I am a student^Z(ctrl+z),但是当whilie循环中的c=getchar()在读完了c=t(最后一个字符t)之后,getchar就不继续读取了,即getchar不继续读取^Z了,也即while循环不退出,这是怎么回事.请各位大神解答,谢谢.. #include #include int getline(char *s, char lim) {

c语言getchar()putchar()问题

问题描述 c语言getchar()putchar()问题 最近在看 c第二版英译版.有个问题并不解. getchar()与putchar() 这是程序 int c; c=getchar(); while(c!='n') putchar(); 这里没有用fflush(stdin)函数清空,结果将无限循环显示. 而我用 while(c=getchar()!='n') putchar(c); 就不会循环. 请问各位大牛,这两个有什么区别,为什么结果就不一样? 解决方案 第一种写法,c永远是第一次输入的

指针-为何c语言中会出现读取位置时发生访问冲突

问题描述 为何c语言中会出现读取位置时发生访问冲突 我是写字符串检索.但是如果把jiansuo()这个函数中第二个if(cha(p2)==(p3-p2+1))的话就没问题了.也就是说后边不能==i,如果是i的话,就出错-- #include int cha(char *p1) { int num=0; for (char *p = p1; *p!= ''; p++) { num++; } return num; } void jiansuo(char *p1,char *p2) { for (c

缓冲区-c语言 getchar()函数问题

问题描述 c语言 getchar()函数问题 #include struct Stu { int num; char name[10]; char sex; char job; union c_p { int b_class; char postion[20]; }spec; } person[2]; int main() { printf("enter data: "); printf("*******************************************

关于ATML自动测试标记语言的问题(官网下的2010的演示版本)

问题描述 关于ATML自动测试标记语言的问题(官网下的2010的演示版本) 我本意是使用TestDescription和TestResult来作为本系统的测试描述和结果描述,但是在使用TestDescription时,对于其operation元素中的子元素td:LocalSensorSignalReference的引用约束搞不太清楚 如: td:Operation xsi:type="td:OperationRead" ID="dsf" name="dfs

printf-(c语言)利用%ld读取double类型,程序可以运行,但是结果是很大的负数?

问题描述 (c语言)利用%ld读取double类型,程序可以运行,但是结果是很大的负数? #include #define TAX_1 17850 #define TAX_2 23900 #define TAX_3 29750 #define TAX_4 14875 #define TAXRATE_1 0.15 #define TAXRATE_2 0.28 int main(void) { double taxsalary,taxpay; int n; printf("Please enter

文件操作-c语言实现txt文件读取

问题描述 c语言实现txt文件读取 VC编译器下c语言没有办法打开TXT文件.代码如下:#include #includevoid main() { FILE *fp; if((fp=fopen(""C:UsersAdministratorDesktopad.txt""r""))==NULL) { printf(""cannot open the file!""); exit(0); } else prin

GO语言常用的文件读取方式_Golang

本文实例讲述了GO语言常用的文件读取方式.分享给大家供大家参考.具体分析如下: Golang 的文件读取方法很多,刚上手时不知道怎么选择,所以贴在此处便后速查. 一次性读取 小文件推荐一次性读取,这样程序更简单,而且速度最快. 复制代码 代码如下: func ReadAll(filePth string) ([]byte, error) {  f, err := os.Open(filePth)  if err != nil {   return nil, err  }  return iout

怎么用C++读取文件中的所有字符?

问题描述 怎么用C++读取文件中的所有字符? int main() { p=0; row=1; ifstream in; in.open("test.txt"); //while(ch!='#'); p=0; while(!in.eof()) { if(in.is_open() ) { scaner(in); } switch(syn) { case 11: cout<<"("<<sum<<","<<