Loading

格式化输出printf

整数的输出--------有符号整数的输出。

多说无益,马上动手操作

 int a = 123;
    long L = 65537;
    printf("12345678901234567890\n");
    printf("a=%d------------(a=%%d)\n", a);   //普通的输出,没事特别
    printf("a=%6d------------(a=%%6d)\n", a); //默认右靠齐,长度6个单位,不够6位长度的左边补空格。
    //正好表示该整数为正数,默认右靠齐,且长度为6个单位,+号算一个单位长度,故还需在左边添加两个空格
    printf("a=%+6d------------(a=%%+6d)\n", a);
    printf("a=%-6d------------(a=%%-6d)\n", a);   //-号表示左靠齐,长度6个单位,不够6个需要在右边补空格。
    printf("a=%+06d------------(a=%%+06d)\n", a); //默认右靠齐,正数,0表示格式控制,除去+号还需要在左边补两个0.
    //左靠齐,6个单位长度,,0格式控制(实际长度小于长度),故还需在左边补3个0.但是左边左靠齐,故在右边补三个空格
    printf("a=%-06d------------(a=%%-06d)\n", a);
    //右靠齐,输出+号,6个单位长度,故在左边补三个0,格式控制符0的作用,因为实际长度7大于6,所以按实际长度输出
    printf("a=%+6.6d------------(a=%%+6.6d)\n", a);
    printf("a=%6.6d------------(a=%%6.6d)\n", a);   //右靠齐,6个单位长度,左边补三个0.
    //左靠齐,至少输出5位数字,因此需要在左边补2个0(实际长度小于长度),但要求长度为6,股还需在右边补一个空格
    printf("a=%-6.5d------------(a=%%-6.5d)\n", a); 
    printf("a=%6.4d------------(a=%%6.4d)\n", a);//右靠齐,至少4位,故需要在左边补一个0,同时要在左边补两个空格
    printf("a=%ld------------(a=%%ld)\n", L);//long输出,正常输出
    printf("a=%hd------------(a=%%hd)\n", a);//长整型先转换为短整型,故取0x00010001的低16位也就是0x0001。故输出为1

实数的输出

 

double f=2.5e5;//表示2.5*10的5次方250000
     printf("  1234567890123456789\n");
     printf("f=%15f----------(f=%%15f)\n",f);//长度为15,默认右靠齐,且double默认保留6位小数,故还需要在左边补两个空格
     printf("f=%015f----------(f=%%015f)\n", f);//0格式控制,右靠齐,长度16个单位,故需在左边补两个0。
     //左靠齐,.0表示保存0位小数(可以不写小数点),长度15个单位,故需要在左边补0,但是左靠齐,还需要在右边补空格。
     printf("f=%-15.0f----------(f=%%-15.0f)\n", f);
     printf("f=%#15.0f----------(f=%%#15.0f)\n", f);//#表示保存小数点,.0表示保存0位小数,右靠齐,长度15个单位,故还需要在左边补空格 
     printf("f=%+15.4f----------(f=%%+15.4f)\n", f);//右靠齐,保留4位有效小数,长度为15,需要在左边补3个空格
     //以指数形式输出,长度为15,小数点为4位,前面有4个空格,e, E 接受浮点或者双精度值并将它转换为指数表示的形式[-] d.dde{+ | -} dd
     printf("f=%#15.4E----------(f=%%15.4E)\n", f); 
     printf("%lf", f);

 

 

 

 

 

 无符号实数的输出

  int a = -1;
    unsigned u = 32767;
    unsigned l = -32768;

    printf("a=%d.a=%u----------(a=%%d,a=%%u)\n", a, a); //普通的输出,第二个因为a在内存中是0xFFFFFFFF,无符号数a=4294967295
    //短整型占2个字节,所以需要类型转换,都要转换成短整型,取a得低16为0xFFFF,整形占4个字节,所以刚好以无符号形式输出。
    printf("a=%hx.a=%x----------(a=%%hx,a=%%x)\n", a, a);
    printf("u=%o.u=%x----------(u=%%o,u=%%x)\n", u, u);//输出为8进制和16进制
    printf("u=%#010x----------(u=%%010x)\n", u);//以无符号的16进制输出,右靠齐输出占10位,格式控制符0,需要在7fff面前补0.
    printf("u=%#10.10x----------(u=%%10.10x)\n", u);//16进制输出,10位数码,需要在7fff前面补6个0.
    printf("L=%lx----------(L=%%lx)\n", l);//16进制无符号长整型计算中以补码形式来存储,故求-32768的补码
    //16进制无符号形式输出,输出包括10位,左对齐,并显示0x,整形占4个字节,全部显示ffff8000后不够10位,在其左边补两个0,
    //(0x是不包含在10个必显的字符中的,但要求总的输出满足14位,必须在输出值的右边补两个空格)
    printf("L=%-#14.10x----------(L=%%-#14.10x)\n", l);

 

 

 

 

 

 

字符和字符串的输出

 char ch = 'A';
    printf("1234567890123456789\n");
    printf("ch=%c----------(ch=%%c)\n", ch);//普通的输出没啥特别的
    printf("ch=%4c----------(ch=%%4c)\n", ch);//默认右靠齐,且输出的字符宽度为4个字符,不足四个长度的在左边填补空格。
    printf("ch=%-4c----------(ch=%%-4c)\n", ch);//负号表示左对齐,且输出长度为4个长度,不够4个长度的在右边补空格。
    printf("ch=%04c----------(ch=%%04c)\n", ch);//默认右靠齐,且控制格式为空格,表示不够4个长度的在左边填0,因为有字符控制。
    printf("ch=%s----------(ch=%%s)\n", "CCNU");//普通的输出,输出为字符串的形式。
    printf("ch=%6s----------(ch=%%6s)\n", "CCNU");//输出的字符串,默认右靠齐,且字符串的长度为6位,不够6位的在左边添加空格
    //默认右靠齐,保留3位小数,且整个字符串的长度为6个长度,控制字符为0,故在左边添加0.
    printf("ch=%06.3s----------(ch=%%06.3s)\n", "CCNU");

 

 

 

 

 
 
posted @ 2021-09-20 22:42  Ironyy  阅读(260)  评论(0)    收藏  举报