• (转自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. }
  • 相关阅读:
    金蝶k3wise 核算项目、辅助资料
    金蝶——“免、抵、退”税操作说明及帐务处理
    阿里云各Linux发行版netcore兼容性评估报告---来自大石头的测试
    金蝶KIS&K3助记码SQL数据库批量刷新
    华为交换机批量加入 Vlan 方法
    华为设备默认console密码
    SQL查询数据并插入新表
    ORACLE删除当前用户下所有的表的方法
    【转】使用Navicat for Oracle新建表空间、用户及权限赋予
    [转]spring mvc注解方式实现向导式跳转页面
  • 原文地址:https://www.cnblogs.com/huyanshan/p/2673244.html
Copyright © 2020-2023  润新知