C 语言 printf 输出详解

printf 定义

printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用 printf 函数之前必须包含stdio.h文件。printf函数调用的一般形式为:

int printf(char *format, arg1, arg2, ...);

printf格式

printf 实例

我们需用一个数字的实例来说明一些问题首先我们将几个格式先讲明一下然后介绍

printf("%(符号)(位).(小数位)(格式));
printf("%-5.3s
");

(1) 负号,用于指定被转换的参数按照左对齐的形式输出。

(2) 数,用于指定最小字段宽度。转换后的参数将打印不小于最小字段宽度的字段。如果有必要,字段左边(如果使用左对齐的方式,则为右边)多余的字符位置用空格填充以保证最小字段宽。.“点” 号用于将字段宽度和精度分开。

(3) 小数位数,用于指定精度,即指定字符串中要打印的最大字符数、浮点数小数点后的位数、整型最少输出的数字数目。

(4) 字母 h 或 l, 字母 h 表不将整数作为 short 类型打印, 字母 l 表示将整数作为 long类型打印。

  

#include <stdio.h>
int main() {
    int n = 13579;
    printf("n=%-3d
", n); // 左对齐
    printf("n=%d
", n);   // a=1234
    printf("n=%2d
", n);  // 位数不足,实际情况输出
    printf("n=%8d
", n);  // 位数不足,右对齐
    printf("n=%-8d
", n); // 位数不足,符号原因左对齐
    printf("n=%08d
", n); // 位数不足,右对齐,补0
}

     

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

int main() {
    char a[20] = "hello world";
    printf("a=%s
", a); 
    printf("a=%10s
", a);  出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格
    printf("a=%.10s
", a);  
    printf("a=%-10s
", a);  
    printf("a=%.15s
", a); 
    printf("a=%15.10s
", a);
    printf("a=%-15.10s
", a);
    return 0;
}

引用shiney 博客内容

 float m=8888.8888;     //float 单精度型浮点数 有效位数是6位或7位,根据不同的浮点数会有不同
    float m1=8888.8888f;    //在后面加上f或F,编译警告:truncation from'const double'to 'float'
                            //编译器默认浮点数为double
    float m2=8888.888f;  
    double n=8888.8888;
    double n1=8888888888.88888888;  //double 双精度型浮点数 有效位数是15位
    printf("m=%f
 m1=%f
 m2=%f
 n=%lf
 n1=%f
",m,m1,m2,n,n1); // m=8888.888672
                                                                //  m1=8888.888672     
                                                                //  m2=8888.887695
                                                               // n=8888.888800
                                                               // n1=8888888888.888889
                                                               //%f的默认输出小数位数就是6位不管有没有l
    /*printf的%f说明符的确既可以输出float型又可以输出 double型。 根据"默认参数提升"规则(在printf这样的函数的
    可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到
    双精度数。严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。*/

    printf("m4=%4.2f
",m);   //宽度总共4位,小数两位,小数点一位,整数一位,这里整数超过宽度规定,按实际整数位输出
    printf("m5=%9.6f
",m);   //浮点数小数部分不足6位,右对齐
    printf("m6=%9.2f
",m);   //整数部分不足6位,右对齐;小数部分超过2位,四舍五入

    char c[20]="Hello,world!";
    printf("c=%s
",c);    
    printf("c=%6.9s
",c);  //c=Hello,wor  6.9s表示输出一个长度长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。

原文地址:https://www.cnblogs.com/causal360/p/4770373.html