scanf和printf格式化输入输出中非常实用的小技巧
输入输出几乎是每个C程序必须具备的功能,因为有了它们,程序才有了交互性。C提供的输入输出函数除了具有必须的输入输出功能外,还有一些其他实用的小技巧,了解这些小技巧将会为程序带来更友好的用户体验。
一、printf字段宽度、精度修饰符
当我们要输出类似表格形式的样式时,我们会用到字段宽度修饰符。它能够让printf函数的输出更加规整。我们先看下面的程序:

程序定义了一个容纳20个数字的数组,然后利用两个for循环将20个数字以四行五列的格式进行输出,虽然我们在printf的格式说明符%d的前面已经敲了一个空格,防止了数据紧密地挨着,但是,很难看出这是一个四行五列的格式。这里我们就需要字段宽度修饰符,请看下面修改之后的程序:

可以看到,在%d之间加上字段宽度修饰符,我们的输出变得好看多了,那么,为什么是7呢?因为7代表着输出占用7个宽度的字段,而我们的数字最宽只有6个,所以7就足够让数据分隔开了。默认是按照右对齐的方式排列的,如果想要左对齐,那么只需要再加一个左对齐的标志“-”即可,如下图:

加了左对齐的标志之后,程序输出就变得非常友好了。这是字段宽度修饰符的作用,字段精度修饰符用于输出小数时的格式化。比如限制小数位数、指定小数以科学计数法显示等。如下图:

从输出来看,第一行是默认输出格式,可以看到默认带有6个小数位;第二行加了.2精度修饰符,限制了小数位为2位,可以看到输出2位小数,并且按照四舍五入进行输出;第三行加了“+”号标志,它能显示变量的正负号,我们定义的变量是正数,所以显示了一个加号,当然了,如果是负数,默认也是输出负号的;第四行以科学计数法进行输出,指数部分默认是以三位显示,不足三位用0补齐;第四行是限制小数位数的输出。
二、scanf修饰符限制输入位数
在scanf中添加字段宽度修饰符可以限制用户输入的数据宽度,即使用户输入的宽度超过需求,scanf也只会读取指定宽度的数据,请看下面的程序:

可以看到即使用户输入四位数,程序也将按照四位进行读取,不利于程序的稳定运行,但是只要在%d之间加上字段宽度修饰符,不管你输入几位,scanf将只读取前两位数:

加上一个提示和小小的修饰符就能够使得程序更加友好,不用复杂的验证代码,非常有利于简单程序的验证,减小程序体积,提高程序运行效率。这里要注意中文的读取,一个中文占用两个字节位置,所以要限制读取两个中文,要指定宽度修饰符为4,如果是3将只读取一个中文。
三、printf、scanf函数的返回值
有没有想过你经常使用的输入输出函数的返回值问题呢?其实它们都是有返回值的。printf函数返回输出的字节个数,scanf返回成功读取项目的个数,如下图:

可以看出,printf返回了7个中文占用的字节数14,scanf返回了读取成功的项目数2。
好了,本篇文章就到这里了,不过文章中打印表格的程序逻辑上是有错误的,哪位细心的读者可以看出来呢?
scanf和printf格式化输入输出中非常实用的小技巧的更多相关文章
- 盘点 php 里面那些冷门又实用的小技巧
1.实用某个字段索引二维数组 取出一个数组的一个字段的值的数组,我们可以使用 array_column, 这个方法还有另外一个用法,如 array_column($array, null, 'key' ...
- Xcode不太常见又实用的小技巧
备份, 原文: http://rocry.com/2012/12/17/xcode-tips/ 让代码中的TODO和FIXME变成Warning 选中某个Target > Build Phase ...
- 记录一些实用的小技巧-JS篇
1.16进制随机颜色 let color = '#'+Math.random().toString(16).slice(-6) 2.类型判断工具函数 function isType(target, t ...
- js的一些实用的小技巧
1.移动端自适应: 移动端的编写首先需要在header写入以下内容来表示页面是以不缩放的形式展示的: <meta name="viewport" content=" ...
- js-分享107个js中的非常实用的小技巧(借鉴保存)
转载原文:http://***/Show.aspx?id=285 1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:doc ...
- iOS实用的小技巧
1.快捷键 上传APP模拟器截图:comm+s 自动保存到桌面 2.storyboard 改型号尺寸 如从iPad改为iPhone6:
- 13个mysql数据库的实用SQL小技巧
此文章为转载 使用CASE来重新定义数值类型 SELECT id,title, (CASE date WHEN '0000-00-00' THEN '' ELSE date END) AS date ...
- 实用css小技巧
display应用 在取消了ul/ol的默认样式{padding:0;list-style-type:none;}的时候:ul的li设置成了行内块(display:inline-block)的话,这时 ...
- vue 项目中实用的小技巧
# 在Vue 项目中引入Bootstrap 有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm按照时,可能会出现一系列的错误 1.安装jQu ...
随机推荐
- 环境变量PATH、cp命令、mv命令、文档查看cat/more/less/head/tail 各个命令的使用介绍
第2周第2次课(3月27日) 课程内容: 2.10 环境变量PATH2.11 cp命令2.12 mv命令2.13 文档查看cat/more/less/head/tail 2.10 环境变量PATH P ...
- 高并发编程-AQS深入解析
要点解说 AbstractQueuedSynchronizer简称AQS,它是java.util.concurrent包下CountDownLatch/FutureTask/ReentrantLock ...
- 如何解决jpa 要求column 名称单词必须用下划线
[转]:http://www.jeesns.cn/article/detail/6657 先引出轮子http://blog.csdn.net/54powerman/article/details/76 ...
- 常用tab选项卡代码
<div class="box"> <ul> <li class="one">课程介绍</li> <li& ...
- mysql-常用组件之定时器
定时器主要用于定时的执行一次或者循环执行一条sql,在实际场景上,例如,定期清理数据表,定期导出日志文件等等场景.本次公司晚上维护系统,晚上需要定期挂维护页,用到了定时器,这里简单总结一下. 启用定时 ...
- [TimLinux] 命令 procps-ng 包内命令介绍
1. procps-ng包 System and process monitoring utilities. 2. 文件列表 free, pgrep, pkill, pmap, ps, pwdx, s ...
- [TimLinux] django CentOS7中django+httpd+mod_wsgi中文UnicodeEncodeError错误
1. 错误 web端访问页面,页面内的view函数要写一个含有中文名字的文件,出现了这个错误.在PyCharm开发调皮环境中不存在这样的错误,把系统部署到http, mod_wsgi时出现. 2. 定 ...
- [TimLinux] django model关于QuerySet
1. 获取执行过的sql命令 from django.db import connections connections['default'].queries 2. 获取QuerySet将执行的sql ...
- 关于直线,V形线,Z形线,M形线分割平面的总结
一:N条直线分割平面 假设,x条线能将平面分为f(x)份,这对于份f(n) 第n条线,和其他n-1条线都有交点时,增加量最大,为n; 则: f(n)=f(n-1)+n; 有f(0)=1:得到:n 条直 ...
- OSC2019关于开源的见闻-开源让世界更美好 社会更文明
一.开源生态报告-红薯-开源中国创始人 1.协作乏力-大厂同样 2.协议许可证使用不当 新许可证-木兰 3.开发者对法律认识完全不够 著作权意识不够 红线意识不够 相关法律法规的熟悉不够 维权及其弱势 ...