
首先,是完整的格式
%-0 m.n l或h格式字符
①%: 表示格式描述的开始符号,必不可少.
②-: 是-表示左对齐输出,如果省略,则表示右对齐输出.
③0: 0表示指定空间用0填充,如果省略,则不填充指定空间.
④m.n: m是指字段宽度,如果数据位数小于m,则在左端填写一个空格,如果大于m,则根据实际数输出数字.
n表示精度,用于指示输出实数的小数位数. 如果未指定nprintf格式输出12个0,则隐式精度为n = 6位.
⑤l或h: l表示long表示整数,而double表示实数. h用于将整数格式的字符修改为short.
两个,设置格式字符
①d格式: 用于输出十进制整数. 有几种用法:
%d: 根据整数数据十进制的实际长度输出.
%md: m是指定输出字段的宽度. 如果数据的位数小于m,则在左端添加一个空格;如果数据的位数大于m,则输出实际的位数.
%ld: 输出长整数数据.
②格式o: 以无符号八进制格式输出整数.

%d: 根据整数数据八进制的实际长度输出.
%lo: 长整数可以格式输出
%mo: 指定要以格式输出的字段的宽度
③x格式: 以无符号十六进制格式输出整数.
%x: 根据整数数据的实际长度十六进制输出.
%lx: 可以格式输出长整数
%mx: 指定要以格式输出的字段的宽度
④u格式: 以无符号十进制形式输出整数.
%u: 根据无符号整数数据十进制的实际长度输出.
%lu: 长整数可以格式输出
%mu: 指定要以格式输出的字段的宽度
⑤c格式: 输出一个字符.
⑥s格式: 用于输出字符串. 有几种用法
%s: 例如: printf(“%s”printf格式输出12个0,“ CHINA”)输出“ CHINA”字符串(不包括双引号).

%ms: 输出字符串占用m列. 如果字符串长度大于m,则将输出所有字符串. 如果字符串长度小于m,则会在左侧添加一个空格.
%-ms: 如果字符串长度小于m,则在列m的范围内,字符串将向左倾斜,在右边带有空格.
%m.ns: 输出占据m列,但是仅采用字符串中的左端n个字符. 这n个字符在第m列的右侧输出,在左侧有空格.
%-m.ns: 其中m和n与上面的含义相同,并且m列范围的左侧输出n个字符,右侧输出空格. 如果n> m,则自动获取n的值,即保证正常输出n个字符.
⑦f格式: 用于输出实数(包括单精度和双精度),以十进制形式输出. 有几种用法:
%f: 不指定宽度,输出整数部分并输出6个小数位.
%m.nf: 输出总共占用m列,其中n位小数. 如果值的宽度小于m,请在左端添加一个空格.
%-m.nf: 输出总共占据n列,其中n位小数. 如果宽度值小于m,请在右端添加一个空格.
⑧e格式: 以指数形式输出实数. 可以使用以下形式:
%e: 数字部分(也称为尾数)输出6个小数位,指数部分占用5或4位数字.
%m.ne和%-m.ne: m,n和“-”的含义与以前相同.
这里n表示数据数字部分的小数位数,m表示整个输出数据的宽度.
⑨p格式: 输出指针地址
三个. 例子

如果要输出字符“%”,则应在“格式控制”字符串中用两个连续的%表示,例如:
printf(“%f %%”,1.0 / 3);
它输出0.333333%.
m.n的格式还可以通过以下方式表示
char ch [20];
printf(“%*. * s \ n”,m,n,ch);
前面的*定义总宽度,后面的*定义输出数量. 分别对应于外部参数m和n.
此方法的优点是您可以在语句外部为参数m和n分配值以控制输出格式.
如何使用printf实现可变的字段宽度?也就是说,我想在运行时确定宽度,而不是使用%8d
使用printf(“%* d”,width,x)
格式说明符中的星号表示参数列表中的int值用于指示字段的宽度.
########### printf正确(首先)进入堆栈###########
#include
#include
#include
int main()
{
uint64_t a = 0x0000000100000002;
int rc = -5;
printf(“%llu leon%d \ n”,a,rc);
//出: 4294967298里昂-5
printf(“%d leon%d \ n”,a,rc);
//出: 2里昂1
printf(“再次%d%d%d \ n”,a,rc);
//出: 再次2 1 -5
uint32_t b;
memcpy(&b,&a,sizeof(uint32_t));
printf(“%d kjfsfljs \ n”,b);
//输出: 2 kjfsfljs(描述为小端)
返回0;
}
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-286951-1.html
打脸中国吗