• printf 函数笔记


    函数声明

    int printf (const char*, ...);
    

    说明

    <返回值> printf ("<格式化字符串>", <参数表>);
    

    返回值

    printf 返回输出的字符长度,输出失败则返回 -1。

    printf("Hello World");
    

    返回值为 12

    格式化字符串

    格式

    %[flags][width][.precision]specifier

    说明

    每个%分别对应控制参数表中每个变量的输出格式(%%除外,当 * 代替width或precision时亦对应一个变量);
    除%引导的部分外,可加入任意希望打印的字符。

    specifier 参数类型 输出格式
    d char型,int型 十进制整数,当变量存储字符时输出其十进制内码
    o int型,unsigned int型 八进制整数
    x,X int型,unsigned int型 十六进制整数
    u unsigned int型 十进制整数
    lld long long型 十进制整数
    llu unsigned long long型 十进制整数
    c char型,int型 单个字符
    s char *型 字符串,顺序打印字符数组中的字符直到遇到''或已打印了由精度指定的字符数
    f float型 十进制实数,默认保留6位小数(遵循四舍五入原则)
    lf double型 十进制实数,默认保留6位小数(遵循四舍五入原则)
    e,E float型,double型 用指数形式输出十进制实数,默认保留6位小数(遵循四舍五入原则)
    g,G float型,double型 十进制小数,省略无意义的0(遵循四舍五入原则)
    p void *型 输出指针地址
    % 不转换参数 输出一个%
    flags 输出格式
    - 在给定的字段长度内左对齐,默认为右对齐
    + 强制在结果之前显示正号或负号,默认不显示正号
    空格 在给定的字段长度内,若没有写入任何符号,则插入一个空格
    0 在给定的字段长度内,若没有写入任何符号,则插入一个0
    # 与 o、x 或 X 一起使用时,非零值前面会分别显示 0、0x 或 0X;
    与 e、E、f 或 lf 一起使用时,会强制输出包含一个小数点,即使后边没有数字;
    与 g 或 G 一起使用时,尾部的零不会被移除
    width/.precision 输出格式
    (number) width和.precision分别指定输出所占字符数和输出实数的精度
    * 未指定精度,输出精度取决于参数表中相应的变量的值

    注意当输出实际长度即使不加空格也大于width规定的长度,width将会被忽略。

    参数表

    参数表中形参的数量和类型与格式化字符串相适应,否则输出可能发生异常;
    每个形参用逗号( , )隔开。

    示例

    #include<stdio.h>
    int main()
    {
        double double1=3.141592654, double2=3.14;
        int integer=15;
        int b=15, c=8;
        printf("%d<
    十进制整数
    ", integer);
        printf("%x<
    十六进制整数
    ", integer);
        printf("%5d<
    指定占5个字符十进制数
    ", integer);
        printf("%*d<
    由变量c指定所占长度十进制数
    ", c, integer);
        printf("%05d<
    位数不足补0
    ", integer);
        printf("%#x<
    十六进制带0x
    
    ", integer);
        
        printf("%lf<
    实数
    ", double2);
        printf("%g<
    实数省略无意义的0
    ", double2);
        printf("%#.0lf<
    只保留整数和小数点实数
    ", double1);
        printf("%15.5lf<
    指定占15个字符保留5位小数实数
    ", double1);
        printf("%*.*lf<
    指由变量b指定所占长度,变量c指定保留小数位数
    
    ", b, c, double1);
    
        printf("%-5d<
    占5位左对齐
    ", integer);
        printf("%+d<
    输出正号
    ", integer);
        printf("%-+lf15.5<
    输出正号左对齐,不足补0
    ", double1);
    
        return 0;
    }
    

    输出

    15<
    十进制整数
    f<
    十六进制整数
       15<
    指定占5个字符十进制数
          15<
    由变量c指定所占长度十进制数
    00015<
    位数不足补0
    0xf<
    十六进制带0x
    
    3.140000<
    实数
    3.14<
    实数省略无意义的0
    3.<
    只保留整数和小数点实数
            3.14159<
    指定占15个字符保留5位小数实数
         3.14159265<
    指由变量b指定所占长度,变量c指定保留小数位数
    
    15   
    占5位左对齐
    +15<
    输出正号
    +3.14159315.5<
    输出正号左对齐,不足补0
    

    注意%3.2lf并不是指整数部分三位小数部分二位,而是指数字长度为3,小数部分长度为2;

    而小数点也需要占一位,故输出会出现问题。

    #include<stdio.h>
    
    int main()
    {
        double a=13.1415;
        printf("%3.2lf
    ", a);
    }
    
    13.14
    
    Process returned 0 (0x0)   execution time : 0.352 s
    Press any key to continue.
    

    事实证明3被忽略,而这也恰好符合预期。

    by sdust weilinfox
    转载请注明原文地址:https://www.cnblogs.com/weilinfox/p/12238603.html

  • 相关阅读:
    关于ssh的一篇很好的文章
    课后作业--2 阅读计划及问题
    课后作业--1
    课后作业PPT 7
    大道至简 7、8、读后感
    第六章 读后感
    第五篇 读后感
    数组课后作业
    课后作业1:字串加密
    第四篇 读后感
  • 原文地址:https://www.cnblogs.com/weilinfox/p/12238603.html
Copyright © 2020-2023  润新知