scanf的一些技巧
2024-08-26 21:59:08
一、scanf和gets
1.不同点:
char string[50];
scanf("%s",string); //当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是不能接受回车,空格和tab键,他们仍会留在输入的缓冲区中。
gets(string); //遇到回车认为输入结束,并用'\n'替代 '\0'.回车键不会留在输入缓冲区中
2.相同点:
字符串接受结束后自动加'\0'。
二、scanf("%c",&c) 与 scanf(" %c",&c)
后者只是在%前多了个空格,似乎没有什么区别,但使用起来区别是很大的。scanf()作单字符输入时规定只接收一个字符,但它却把回车符也作为字符对待的。这就造成程序中只有一个输入字符的scanf()语句时,问题还不大,但如果后面还跟着第二个scanf()字符输入语句,这个scanf()就把前面输入的回车符当作输入字符了。这就在输入逻辑上造成了混乱,达不到人们预期的愿望。有了这个空格,因为scanf()是跳过空格读字符的,就回避了这个问题。实践证明,这个空格放在%c后面也不能达到目的。应当说,这也是比较巧妙的应用!
三、scanf("%d",&n) 与 scanf("%d ",&n)
这个是利用了上面二中的方法,如果程序scanf("%d",&n)之后要读char,会把读入n之后的空格读进ch,而scanf("%d ",&n)这里d后面多个空格,就相当于后面%c前多了个空格,不管是scanf("%c",&ch)还是ch=getchar(),都可以跳过那个回车。
最新文章
- IISExpress 调试使用学习,使用附加到进程进行快速调试
- NSNumber 、 NSValue 、 日期处理 、 集合类 、 NSArray(一)
- 瀑布流插件(jquery.masonry.js)
- grab jpegs from v4l2 devices
- Java 比较两个字符串的大小
- Eclipse MyEclipse 复制项目 复制现有项目 复制功能相似项目
- Low-rank approximations
- 【Java】 剑指offer(30) 包含min函数的栈
- istio实现自动sidecar自动注入(k8s1.13.3+istio1.1.1)
- 基于位置的服务——百度地图SDK练习
- Forward+ Shading架构
- Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)
- 用MFC库函数AfxBeginThread()来创建线程
- 学号 20155219 《Java程序设计》第1周学习总结
- libgdx自制简易版Don't Touch The White Tile
- Flash对象插入到网页中的3px问题
- restful 分风格
- Scala学习——Scala By Example——to be continued
- 模拟函数调用 Simulation Exclusive Time of Functions
- 结合cocos2d-x开发配置sublime text
热门文章
- 2014 Super Training #8 A Gears --并查集
- POJ 2891 Strange Way to Express Integers【扩展欧几里德】【模线性方程组】
- 项目管理工具Redmine各功能测试
- 泛型类型的协变(covariant)和逆变
- 【WPF】Winform调用WPF窗体注意事项
- Unity小知识
- 反射中使用 BindingFlags.IgnoreCase
- Asp.Net MVC 4 Web API 中的安全认证-使用OAuth
- Caffe学习系列(5):其它常用层及参数
- [CareerCup] 14.6 CircularArray 环形数组