1.你要先把getch()和ungetch()两个函数的定义搞清楚。
2.具体的解释可以这样理解:假如你输入了字符串“a123a”,现在要是想读取其中的数字并组成一整数(即得到整数123),那么程序在读完“3”之后还要继续读下一位“a”,程序判断“a”不是数字,因此读取整数的部分到此结束,得到“123”;但是从缓存区读出来的字符“a”,还要保存到buf[BUFSIZE],以备下次程序读取时继续使用,这样就要用到ungetch(),下次再次读取字符时用getch()把“a”从buf[BUFSIZE]中读出来。
这个地方确实很费解,我当初也是花了好长时间看懂的,你在理解一下吧!
while ((s[0] = c = getch()) == ' '
|| c== '\t');//跳过空白字
就是跳过空白字符啊!当c=getch等于空白字符或者是制表符就一直执行语句while ((s[0] = c = getch()) == ' '
|| c=;这样就能跳过空白字符。因为scanf等函数会把未尾输入的换行符\n等空白字符留给下一次输入,所以他的作用就是清空上次输入,为新输入做好准备。如果不清空,((s[0] = c = getch()) 就可能直接接收上次未读取的换行符\n,而这个值是无意义的。而ungetch则是把字符退回到键盘缓冲区留给下一次使用,比如c=getch();ungetch(c);a=getch;现在a就不需要输入数值他会读入上次键盘c的值相当a=c
不加getch函数运行结束后会立即退出程序,可能会导致看不清运行结果