[C++] getchar()有什么用

2023-09-29 17:38
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