博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scanf的一些技巧
阅读量:7041 次
发布时间:2019-06-28

本文共 677 字,大约阅读时间需要 2 分钟。

一、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(),都可以跳过那个回车。

 

转载地址:http://lyhal.baihongyu.com/

你可能感兴趣的文章
堆栈以及对象的引用
查看>>
K-means文本聚类系列(已经完成)
查看>>
WCF RIA Service错误处理
查看>>
如何学好VC和MFC(各前辈学习方法及感受整理)(五)
查看>>
Windows消息常量(2)
查看>>
Spring中bean配置的继承
查看>>
DataGridView设置行高
查看>>
数据恢复:模拟2个逻辑坏块
查看>>
Ruby学习之类2
查看>>
Hibernate 映射配置文件详解(一)
查看>>
ASP.NET MVC——Action的执行
查看>>
poj2871
查看>>
将字符串切割成数组 componentsSeparatedByString
查看>>
HDU-4472 Count 递推
查看>>
大型网站核心技术
查看>>
吸收遍历Google Code jam 2013 Round 1B A题
查看>>
Android获取设备型号、SDK版本及其系统版本
查看>>
windows中如何在命令行启动启动程序
查看>>
布局文件Android ListView入门知识--各种Adapter配合使用
查看>>
项目文件跟Google学习Android开发-工具篇-Android Studio入门
查看>>