getchar()在C程序中的妙用!
来源:互联网 发布:3d绘画软件 编辑:程序博客网 时间:2024/05/22 04:57
getchar()在C程序中的功能是接收一个字符,当我们在连续输入字符的时候getchar()会给你意想不到的效果。下面是net小伙做的一些测试:首先看下面的这个程序:
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main(void) 4 { 5 int a,b,c; 6 printf("please input num a:\n"); 7 scanf("%d",&a); 8 printf("please input num b:\n"); 9 scanf("%d",&b);10 printf("please input num c:\n");11 scanf("%d",&c);12 printf("%d,%d,%d",a,b,c);13 }
运行结果可想而知:
那么把int改成char之后会是神马结果呢?来看下一段代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main(void) 4 { 5 char a,b,c; 6 printf("please input num a:\n"); 7 scanf("%c",&a); 8 printf("please input num b:\n"); 9 scanf("%c",&b);10 printf("please input num c:\n");11 scanf("%c",&c);12 printf("%c,%c,%c",a,b,c);13 }
你能猜到运行结果是什么吗?
为什么会显示这样的结果?你猜到是什么原因了吗?
我们再来看一下源代码:程序连续接收了三个字符,在C中enter键代表一个换行符,所以当输入完a的值‘q’之后按下enter键,换行符立马被字符b接收了,然后程序再向下走,输入c的值‘w’。结果就会按顺序显示a,b,c的值,我们已经知道a='q',b='\n',c='w';所以结果就会显示两行。
如果我们加入getchar()会有什么结果呢?
我们再来看一下改进的程序:
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main(void) 4 { 5 char a,b,c; 6 printf("please input num a:\n"); 7 scanf("%c",&a); 8 getchar(); 9 printf("please input num b:\n");10 scanf("%c",&b);11 getchar();12 printf("please input num c:\n");13 scanf("%c",&c);14 printf("%c,%c,%c",a,b,c);15 }
显示结果如下:
现在为什么会正常显示我们想要的结果呢?原因就是getchar()把enter键所表示的字符接收了,所以就会达到想要的效果了。
到现在你应该明白为什么会出现这种情况了吧!无非就是输入的规范问题,如果我们运行第二个程序,用另一种方法输入看看会是神马效果:
看到没?也可以获取想要的结果,但是程序并不是这么美观了,为什么会出现这种效果呢?
因为编译器规定输入的时候并不是立即回显,而是存到一个缓冲区里面。当遇到换行字符会释放缓冲区的数据,并清空缓冲区。
scanf()在读取数字时会跳过空格、制表符和换行符!
http://www.cnblogs.com/ngnetboy/archive/2012/11/06/2756534.html
1 0
- 【C】getchar()在C程序中的妙用!
- getchar()在C程序中的妙用!
- getchar()在C程序中的妙用!
- getchar()在C程序中的妙用!
- “位运算”在程序开发中的妙用!
- #在C中的妙用你知道多少
- 关于c圣经中的getchar
- c中的getchar和putchar
- getchar()的妙用
- 在VS中编写c程序遇到的while(getchar()!='q')的疑惑
- DoEvents 在VB中的妙用
- 双引号在搜索中的妙用
- 二进制在数学中的妙用
- GetModuleFileName在HOOK中的妙用
- 二进制在数学中的妙用
- 二进制在数学中的妙用
- 二进制在数学中的妙用
- 二进制在数学中的妙用
- 【Android】Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能
- final 关键字的用法
- hadoop基础----hadoop实战(五)-----myeclipse开发MapReduce---WordCount例子---解析MapReduce的写法
- 知道这 20 个正则表达式,能让你少写 1,000 行代码
- :nth-child() | CSS属性参考
- getchar()在C程序中的妙用!
- 网页尺寸scrollHeight
- pickle模块的基本操作
- iPhone使用技巧:苹果手机微信聊天记录删除了怎么恢复
- iOS 遍历方式
- Xcode8 Log太多怎么解决
- 实例
- ASP.NET MVC4 乱七八糟罗列
- 无序数组求第K大