C程序中getchar()的作用是接收一个字符。当我们连续输入字符时,getchar()会给你意想不到的效果。以下是网友做的一些测试:
首先看下面的程序:
1 #include
2 #include
3 int main(空)
4 {
5 整数 a、b、c;
6 printf("请输入数字a:\n");
7 scanf("%d",&a);
8 printf("请输入数字 b:\n");
9 scanf("%d",&b);
10 printf("请输入数字 c:\n");
11 scanf("%d",&c);
12 printf("%d,%d,%d",a,b,c);
13}
运行结果可想而知:
那么int改为char后会得到什么结果呢?我们看下一段代码:
1 #include
2 #include
3 int main(空)
4 {
5 个字符 a、b、c;
6 printf("请输入数字a:\n");
7 scanf("%c",&a);
8 printf("请输入数字 b:\n");
9 scanf("%c",&b);
10 printf("请输入数字 c:\n");
11 scanf("%c",&c);
12 printf("%c,%c,%c",a,b,c);
13}
你能猜出结果是什么吗?
为什么会出现这样的结果呢?你能猜出原因吗?
我们再看一下源代码:程序连续接收到三个字符。在C中,回车键代表换行符,因此当输入a的值'q'后按回车键时,换行符立即被字符b接收。然后程序再次向下运行并输入 c 的值“w”。结果会按顺序显示a、b、c的值。我们已经知道a='q', b='\n', c='w';所以结果会显示两行。
如果加上getchar()会得到什么结果呢?
我们来看看改进后的程序:1 #include
2 #include
3 int main(空)
4 {
5 个字符 a、b、c;
6 printf("请输入数字a:\n");
7 scanf("%c",&a);
8. getchar();
9 printf("请输入数字 b:\n");
10 scanf("%c",&b);
11 getchar();
12 printf("请输入数字 c:\n");
13 scanf("%c",&c);
14 printf("%c,%c,%c",a,b,c);
15}
显示结果如下:
为什么我们想要的结果现在正常显示了呢?原因是getchar()接收的是回车键代表的字符,这样就达到了想要的效果。
现在你应该明白为什么会出现这种情况了吧!无非是输入规格的问题。如果我们运行第二个程序,用另一种方式输入,就会有神奇的效果:
你有没有看到?也可以得到想要的结果,但是程序不是那么美观。为什么会出现这样的效果呢?
因为编译器规定输入不是立即回显,而是存储在缓冲区中。当遇到换行符时,缓冲区中的数据将被释放,缓冲区将被清除。
scanf() 在读取数字时会跳过空格、制表符和换行符!
原文:http://m.gsm-guard.net/ngnetboy/archive/2012/11/06/2756534.html