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;
}
还有输出一些学号,编号等
下一篇: java用printf格式化输出