在C++中使用getchar函数时,使用时如果不注意一些小细节,很容易造成输出结果与预想的不一致。这里来分析下出错的原因。
首先来看一段代码
#include <stdio.h> void main() { char a,b; printf("enter char:"); a=getchar(); printf("%c\n",a); printf("enter char:"); b=getchar(); printf("%c\n",b); }
按常理来说,当我们编译运行以后,在界面中输入一个字符,屏幕将打印出一个字符,再输入一个字符,屏幕也将打印出第二次输入的字符。
我们来看下实际结果:
______________________________
enter char:s
s
enter char:
Press any key to continue|
______________________________
当我们输入一个字符s时,直接就跳到了”Press any key to continue”,而在第二次”enter char”时我们并没有让输入要输入的字符。
这是为什么呢?来看下”getchar()”函数的使用方法。
使用”getchar()”函数输出字符时,实际的输入过程是:在键盘上输入字符并按下回车键后,字符和回车键被送入内存的缓存区(称为键盘缓存区)中,然后getchar()函数再从缓冲区中读一个字符,第1个”getchar()”函数将读入的字符赋值给字符型比变量a,而缓存区中的回车换行符被后面的”b=getchar()”语句读入而使b实际成为”空”字符。
所以我们应该将代码改一下,在”a=getchar()”后面添加一个”getchar()”。
#include <stdio.h> void main() { char a,b; printf("enter char:"); a=getchar(); getchar(); printf("%c\n",a); printf("enter char:"); b=getchar(); printf("%c\n",b); }
第1个”getchar()”函数将读入的字符a,第2个”getchar()”函数用于”吃掉”输入缓冲区中的回车换行符,防止后面的”b=getchar()”读取缓存区的”回车换行符”。这样就不会出错了,看看运行结果。
______________________________
enter char:s
s
enter char:x
x
Press any key to continue|
______________________________
所以在使用getchar 函数时一定注意,否则总是会有输出错误的问题。
多谢!!文章解释的清楚明了!!!
[回复]