zoukankan      html  css  js  c++  java
  • (转自CSDN日新为道的专栏)printf的格式控制符,在CSDN看到的,转在这里

    一、完整格式

    %   - 0   m.n  l或h   格式字符

    %:表示格式说明的起始符号,不可缺少。
    -:有-表示左对齐输出,如省略表示右对齐输出。
    0:有0表示指定空位填0,如省略表示指定空位不填。
    m.n:m指域宽,若数据的位数小于m,则左端补空格,若大于m,则按实际位数输出。
           n指精度,用于说明输出的实型数的小数位数。未指定n时,隐含的精度为n=6位。
    l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。

    二、格式字符

    ① d格式:用来输出十进制整数。有以下几种用法:

    %d:按整型数据十进制的实际长度输出。
    %md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
    %ld:输出长整型数据。

    ② o格式:以无符号八进制形式输出整数。

    %d:按整型数据八进制的实际长度输出。
    %lo:对长整型可以用格式输出
    %mo:指定字段宽度用格式输出

    ③ x格式:以无符号十六进制形式输出整数。

    %x:按整型数据十六进制的实际长度输出。
    %lx:对长整型可以用格式输出
    %mx:指定字段宽度用格式输出

    ④ u格式:以无符号十进制形式输出整数。

    %u:按无符号整型数据十进制的实际长度输出。
    %lu:对长整型可以用格式输出
    %mu:指定字段宽度用格式输出

    ⑤ c格式:输出一个字符。


    ⑥ s格式:用来输出一个串。有几中用法

    %s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。
    %ms:输出的字符串占m列,如字符串长度大于m,将字符串全部输出。若串长小于m,则左补空格。
    %-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
    %m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
    %-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。


    ⑦ f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
    %f:不指定宽度,整数部分全部输出并输出6位小数。
    %m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。 
    %-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。

    ⑧ e格式:以指数形式输出实数。可用以下形式:
    %e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
    %m.ne和%-m.ne:m、n和”-”字符含义与前相同。
    此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。

    ⑨ p格式:输出指针地址

    三、实例

    如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:
    printf("%f%%", 1.0/3);
    输出0.333333%。


    对于m.n的格式还可以用如下方法表示
    char ch[20];
    printf("%*.*s\n",m,n,ch);
    前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。
    这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。



    如何用printf 实现可变的域宽度? 就是说,我想在运行时确定宽度而不是使用 %8d
    使用 printf("%*d", width, x)
    格式说明符中星号表示,参数列表中的一个int值用来表示域的宽度。


      1. ########### printf 是 右()入栈 ###########
      2. #include <stdio.h>
      3. #include <stdlib.h>
      4. #include <stdint.h>
      5. int main()
      6. {
      7.     uint64_t a = 0x0000000100000002;
      8.     int rc = -5;
      9.     printf("%llu leon %d\n", a, rc);
      10.     //out: 4294967298 leon -5
      11.     printf("%d leon %d\n", a, rc);
      12.     //out: 2 leon 1
      13.     printf("%d again %d %d\n", a,rc);
      14.     //out: 2 again 1 -5
      15.     uint32_t b ;
      16.     memcpy(&b, &a, sizeof(uint32_t));
      17.     printf("%d kjfsfljs\n", b);
      18.     //out: 2 kjfsfljs (说明是小端)
      19.     return 0;
      20. }
  • 相关阅读:
    打包python脚本为exe可执行文件-pyinstaller和cx_freeze示例
    2011年-CUshell编程大赛
    【Java菜鸟学习总结】Java基础知识(类)
    【Java菜鸟学习总结】Java基础(关键字、数据类型、运算符、流程控制)
    【Java菜鸟学习总结】Java 后端开发学习路线
    【opencv_python学习之三】图像处理(一)更改色彩模式
    【opencv_python学习之二.五】如何查看opencv_python的函数说明
    【cocos2d-x 学习(一)】【转】Cocos2d-x 3.X Qt MinGW版本编译运行
    mfc导出dll(一)
    【opencv_python学习之二】图像处理初识
  • 原文地址:https://www.cnblogs.com/huyanshan/p/2673244.html
Copyright © 2011-2022 走看看