C语言printf格式化输出

格式化规定符:

%d 十进制有符号整数
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数  
%x  %X 无符号以十六进制表示的整数
%o 无符号以八进制表示的整数(注意是字母欧,不是零)  
%g 自动选择合适的表示法

对于规定符的一些说明:

1、对于%d:

  • %md: 指定输出的宽度。数据位数小于m,左端补空格;大于m,按实际位数输出。比如说%3d 表示输出3位 整型数,不够3位右对齐。若想在输出值前加一些0, 就应在场宽项前加个0。例如%04d 表示在输出一个小于4 位的数值时,将在前面补0使其总宽度为4位。
  • %ld: 输出长整型数据。
  • %-md:可以控制输出左对齐,没有则说明右对齐。

2、对于%f:

  • %m.nf:表示最大场宽为m,小数位为n,整数为则为m-n-1,不够m为右对齐。 例如:%6.2f表示输出场宽为9的浮点数,小数点后保留2为小数,整数位为3位,小数点占一位。
  • %-m.nf:表示可以控制输出左对齐。
  • %lf:表示输出double型浮点数。

3、对于%s

  • %-5s:表示输出5个字符左对齐,没有负号则右对齐。
  • %6.9s:表示一个长度不小于6且不大于9的字符串,若大于9,则第9个后面的字符将被删除。


4、对于%x

  • 在编程语言中我们经常看见0x100000等0x代表是16进制后面的16进制的数值,然后一般16进制的数值代表内存地址

  • 例如

    #include <stdio.h>
    
    int main(){
        int address;
        printf("%0x", address);
       
        return 0;
    }
    

    会出现如下错误

    Error: Memory space at 0x100000(object ‘address’) is not initialized
    printf("%0x", address);

    ^^^^^^^^^^^^^^^^^^^

    意思就是对象address(就是你定义的变量address)在内存地址的0x100000位置没有初始化,导致在输出的时候出错。

多在错误中采坑积攒经验,快速成长


printf格式输出数字,位数不够前面补0

printf格式输出:%[flags][width][.perc][F|N|h|l]type

用到了flags中的 0 (注意是零不是字母欧) ,将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用)

width 即表示需要输出的位数。

例如:

#include <stdio.h>
int main(){
    int a=5;
    printf(%03d, a);
    return 0;
}

输出005


也可以用 * 代替位数,在后面的参数列表中用变量控制输出位数;

#include <stdio.h>
int main(){
    int a=5,n=3;
    printf(%0*d,n,a);
    return 0;
}

输出005


实际应用举例

世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

输入格式:

输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。

输出格式:

在一行中按照“yyyy-mm-dd”的格式给出年、月、日。

输入样例:

09-15-2019

输出样例:

2019-09-15

代码实现

#include <stdio.h>

int main(){
    int month,day,year;
    scanf("%d-%d-%d",&month,&day,&year);

    printf("%d-%02d-%02d", year,month,day);
    return 0;
}

还有输出一些学号,编号等

你可能感兴趣的:(C语言)