scanf和printf格式化输入输出中非常实用的小技巧

时间:2021-11-10 08:52:15

输入输出几乎是每个C程序必须具备的功能,因为有了它们,程序才有了交互性。C提供的输入输出函数除了具有必须的输入输出功能外,还有一些其他实用的小技巧,了解这些小技巧将会为程序带来更友好的用户体验。

一、printf字段宽度、精度修饰符

当我们要输出类似表格形式的样式时,我们会用到字段宽度修饰符。它能够让printf函数的输出更加规整。我们先看下面的程序:

scanf和printf格式化输入输出中非常实用的小技巧

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

scanf和printf格式化输入输出中非常实用的小技巧

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

scanf和printf格式化输入输出中非常实用的小技巧

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

scanf和printf格式化输入输出中非常实用的小技巧

从输出来看,第一行是默认输出格式,可以看到默认带有6个小数位;第二行加了.2精度修饰符,限制了小数位为2位,可以看到输出2位小数,并且按照四舍五入进行输出;第三行加了“+”号标志,它能显示变量的正负号,我们定义的变量是正数,所以显示了一个加号,当然了,如果是负数,默认也是输出负号的;第四行以科学计数法进行输出,指数部分默认是以三位显示,不足三位用0补齐;第四行是限制小数位数的输出。

二、scanf修饰符限制输入位数

在scanf中添加字段宽度修饰符可以限制用户输入的数据宽度,即使用户输入的宽度超过需求,scanf也只会读取指定宽度的数据,请看下面的程序:

scanf和printf格式化输入输出中非常实用的小技巧

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

scanf和printf格式化输入输出中非常实用的小技巧

加上一个提示和小小的修饰符就能够使得程序更加友好,不用复杂的验证代码,非常有利于简单程序的验证,减小程序体积,提高程序运行效率。这里要注意中文的读取,一个中文占用两个字节位置,所以要限制读取两个中文,要指定宽度修饰符为4,如果是3将只读取一个中文。

三、printf、scanf函数的返回值

有没有想过你经常使用的输入输出函数的返回值问题呢?其实它们都是有返回值的。printf函数返回输出的字节个数,scanf返回成功读取项目的个数,如下图:

scanf和printf格式化输入输出中非常实用的小技巧

可以看出,printf返回了7个中文占用的字节数14,scanf返回了读取成功的项目数2。

好了,本篇文章就到这里了,不过文章中打印表格的程序逻辑上是有错误的,哪位细心的读者可以看出来呢?

scanf和printf格式化输入输出中非常实用的小技巧的更多相关文章

  1. 盘点 php 里面那些冷门又实用的小技巧

    1.实用某个字段索引二维数组 取出一个数组的一个字段的值的数组,我们可以使用 array_column, 这个方法还有另外一个用法,如 array_column($array, null, 'key' ...

  2. Xcode不太常见又实用的小技巧

    备份, 原文: http://rocry.com/2012/12/17/xcode-tips/ 让代码中的TODO和FIXME变成Warning 选中某个Target > Build Phase ...

  3. 记录一些实用的小技巧-JS篇

    1.16进制随机颜色 let color = '#'+Math.random().toString(16).slice(-6) 2.类型判断工具函数 function isType(target, t ...

  4. js的一些实用的小技巧

    1.移动端自适应: 移动端的编写首先需要在header写入以下内容来表示页面是以不缩放的形式展示的: <meta name="viewport" content=" ...

  5. js-分享107个js中的非常实用的小技巧(借鉴保存)

    转载原文:http://***/Show.aspx?id=285 1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:doc ...

  6. iOS实用的小技巧

    1.快捷键 上传APP模拟器截图:comm+s 自动保存到桌面 2.storyboard 改型号尺寸 如从iPad改为iPhone6:

  7. 13个mysql数据库的实用SQL小技巧

    此文章为转载 使用CASE来重新定义数值类型 SELECT id,title, (CASE date WHEN '0000-00-00' THEN '' ELSE date END) AS date ...

  8. 实用css小技巧

    display应用 在取消了ul/ol的默认样式{padding:0;list-style-type:none;}的时候:ul的li设置成了行内块(display:inline-block)的话,这时 ...

  9. vue 项目中实用的小技巧

    # 在Vue 项目中引入Bootstrap 有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm按照时,可能会出现一系列的错误 1.安装jQu ...

随机推荐

  1. AutoMapper小结

    一些orm框架,在用到Entity的时候有一些开源代码用到了automapper(如:nopcommence),将数据对象转成DTO.比如在ORM中,与数据库交互用的Model模型是具有很多属性变量方 ...

  2. scrapy爬虫成长日记之将抓取内容写入mysql数据库

    前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的.这很显然不满足我 ...

  3. 连连看beta发布

    组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...

  4. &lbrack;转载&rsqb;Linux的时间与时钟中断处理

    本文主要介绍在Linux下的时间实现以及系统如何进行时钟中断处理. 一. Linux的硬件时间 PC机中的时间有三种硬件时钟实现,这三种都是基于晶振产生的方波信号输入.这三种时钟为: 实时时钟RTC ...

  5. (原&plus;转)pycharm中使用caffe

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5896446.html 参考网址: http://www.th7.cn/Program/Python/2 ...

  6. Linux系统编程(14)——shell常用命令

    1. ls命令 ls命令是列出目录内容(ListDirectory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. "ls -l"命令已详情模式 ...

  7. java如何在一个有序的数组类插入一个数!

    第一种:依次与有序数组中的每个数进行比较,然后找到位置之后,定义一个新的数组,该信数组的长度加一,再使用system.arraycopy将于数组copy到新数组!import java.util.Ar ...

  8. 51 nod 1227 平均最小公倍数

    原题链接 Lcm(a,b)表示a和b的最小公倍数,A(n)表示Lcm(n,i)的平均数(1 <= i <= n), 例如:A(4) = (Lcm(1,4) + Lcm(2,4) + Lcm ...

  9. VS 域名绑定IIs 调试

    一排致敬老师傅:https://www.cnblogs.com/woxpp/p/5805624.html 问题: 域名www.jinhuang.com,网站的ip地域跳转出问题,需要测试. ①修改Ho ...

  10. learning svn change commit log

    将repository内hook子文件夹中的pre-revprop-change.tmpl复制改成pre-revprop-change.bat,内容改为:exit 0