getchar 函数使用注意事项:C++

2009年7月16日 发表评论 阅读评论

C++中使用getchar函数时,使用时如果不注意一些小细节,很容易造成输出结果与预想的不一致。这里来分析下出错的原因。
首先来看一段代码

#include <stdio.h>
 
void main()
{
	char a,b;
	printf("enter  char:");
	a=getchar();
	printf("%cn",a);
	printf("enter char:");
	b=getchar();
	printf("%cn",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("%cn",a);
	printf("enter char:");
	b=getchar();
	printf("%cn",b);
}

第1个”getchar()”函数将读入的字符a,第2个”getchar()”函数用于”吃掉”输入缓冲区中的回车换行符,防止后面的”b=getchar()”读取缓存区的”回车换行符”。这样就不会出错了,看看运行结果。
______________________________
enter char:s
s
enter char:x
x
Press any key to continue|
______________________________

所以在使用getchar 函数时一定注意,否则总是会有输出错误的问题。

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: getchar 函数使用注意事项:C++
  1. Dong | #1
    2012年1月17日06:28

    多谢!!文章解释的清楚明了!!!

  1. 本文目前尚无任何 trackbacks 和 pingbacks.