废话不多说,简单粗暴地上图。

(一)初始定义

(二)运行结果

(三)规律总结

对于如下:

printf("%7.4d",12);

printf("%4.7f",123.456);

printf("%12.7s","hello");

等输出语句,

归纳成形如printf("%a.bc",d)格式的输出语句,其中d为int/float/char[]等类型变量,c为d/f/s等格式符,a为前修饰符,b为后修饰符。

规律如下:

1.前修饰符的绝对值表示输出宽度限制;

2.后修饰符表示输出精度限制;

3.首先考虑后修饰符,然后再考虑前修饰符;

4.int型变量要求输出数字位数不低于精度限制,如果低于则用0在数字前补齐;

5.float型变量要求输出小数点后保留位数等于精度限制,多余部分被剪切掉;

6.char[]型变量要求输出字符串长度不高于精度限制,如果高于则将字符串后面多余的剪切掉;

7.对于上三者变量都要求输出宽度不低于宽度限制,如果低于,则用空格补齐;

8.前修饰符可正可负,后修饰符必须为正。

8.前修饰符如果为正数,则补齐宽度的空格在左,如果为负数,则补齐宽度的空格在右;

9.额外记忆:如果char[]型变量前修饰符以0开头,则补齐宽度不是用空格,而是用0。

(四)举例记忆

【例1】printf("%10.7s","12345678");

首先考虑后修饰符-精度限制为7;要求输出字符串长度不高于精度限制,如果高于则将字符串后面多余的剪切掉,"12345678"长度为8,多出一个,则将后面的“8”剪切掉,得到“1234567”;

然后考虑前修饰符-输出宽度限制为10;此时要求输出宽度不低于宽度限制,如果低于,则用空格补齐,现在长度为7需要补充3个空格达到宽度10;

因为前修饰符为正数,所以补齐宽度的空格在左,即输出格式应为“###1234567”//为便于理解,空格符我用#符号代替。

【例2】printf("%-7.4d",123456);

首先考虑后修饰符-精度限制为4;要求输出数字位数不低于精度限制,此时位数为6不低于4,满足条件;

然后考虑前修饰符-输出宽度限制为7;此时要求输出宽度不低于宽度限制,如果低于,则用空格补齐,现在长度为6需要补充1个空格达到宽度7;

因为前修饰符为负数,所以补齐宽度的空格在右,即输出格式应为“1234566#”//为便于理解,空格符我用#符号代替。

附图:验证分析正确

山谈c中printf格式修饰符的更多相关文章

  1. SAS学习笔记33 格式修饰符

    冒号(:)格式修饰符 从非空格开始读取变量所对应的数据,直到满足以下任何一种情况 遇到下一个空格列 对应变量所定义的长度已经读满 数据行结束 &格式修饰符 修饰所读取为字符型的列数据中含有一个 ...

  2. [.net 面向对象编程基础] (8) 基础中的基础——修饰符

    [.net 面向对象编程基础] (8) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改 ...

  3. php中的访问修饰符 private、protected、public的作用范围

    1. private 只能在类内部使用 2. protected 可以在类内部和继承类里使用.类外部不能使用[即实例化后的对象无法调用] 3. public 全部范围适用. 4.子类复写父类中的方法时 ...

  4. java中的类修饰符、成员变量修饰符、方法修饰符。

    类修饰符: public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类. abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现. fin ...

  5. 详解Java中的访问控制修饰符(public, protected, default, private)

    Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获 ...

  6. C# 中的sealed修饰符学习

    转载原地址 http://developer.51cto.com/art/200908/147327.htm C#语言还是比较常见的东西,这里我们主要介绍C# sealed修饰符,包括介绍两个修饰符在 ...

  7. OC基础教程 C语言中的格式占位符:

    C语言中的格式占位符: %a,%A 读入一个浮点值(仅C99有效) %c 读入一个字符 %d 读入十进制整数 %i 读入十进制,八进制,十六进制整数 %o 读入八进制整数 %x,%X 读入十六进制整数 ...

  8. Java学习笔记十九:Java中的访问控制修饰符

    Java中的访问控制修饰符 一:Java修饰符的种类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class Hello ...

  9. 20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

    1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. ...

随机推荐

  1. webqq的注册登记和聊天页面--运用jsonp跨域

    简介: 我们知道,ajax用于数据交互,但它不能跨域,跨域是指从一个域名的网页去请求另一个域名的资源.比如从http://www.baidu.com/ 页面去请求 http://www.google. ...

  2. jvm的内存空间分区

    在方法(代码块)中定义一个变量时,java就在栈中为这个变量分配JVM内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的JVM内存空间:而在堆中分配的JVM内存由java虚拟机的自动 ...

  3. SVM matlab 代码详解说明

    x=[0 1 0 1 2 -1];y=[0 0 1 1 2 -1];z=[-1 1 1 -1 1 1]; %其中,(x,y)代表二维的数据点,z 表示相应点的类型属性. data=[1,0;0,1;2 ...

  4. Javascript面对对象. 第二篇

    但是还有一个问题,就是识别的问题,因为根本无法搞清楚他们到底是哪个对象的实例. 1.构造函数 function CreateObject(name,age){ //创建一个对象,使用构造函数的对象都是 ...

  5. C++测试利器--google test开源测试框架

    资料 偶然发现了google的测试框架gtest,马上试了下,效果挺不错,特别是对于写c++的人来说,方便很多.以前自己写c++的模块,通常是写好了模块后再另外定义些函数,然后在函数里面写测试用例来测 ...

  6. ubuntu16.04下安装配置深度学习环境(一、cuda7.5的安装)

    1.下载所需要的软件 cuda7.5下载(点击下载链接),cudnn4.0下载 2.安装NVIDIA驱动. 一般有两种方法:1)一种方法是利用"软件和更新"来安装,依次选择 系统设 ...

  7. Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven

    github地址,点这里. 项目效展示,点这里.账号:admin 密码:123456 下一篇文章开始,所有的项目源码都是与maven整合后的代码了,所以这一篇讲一讲maven. 1.简单介绍 我们看一 ...

  8. 每天一个linux命令(25)--Linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: 命令: ls  -lih 2098120 lrwxr ...

  9. HTML5之通信和多线程

    HTML通信 跨文档消息传输 HTML5提供了在网页文档之间相互接收和发送信息的功能,使用这个功能,只要获取到网页所在窗口对象的实例,不仅同源(域+端口)的网页可以相互通信,甚至可以实现跨域通信.涉及 ...

  10. iframe----摘抄出处未知

    1.frame不能脱离frameSet单独使用,iframe可以: 2.frame不能放在body中:如下可以正常显示: <!--<body>--> <frameset ...