C-printf的格式化输入/输出

这篇博客详细介绍了C语言中printf函数的格式化输出,包括打印整数、浮点数(默认6位精度)、字符及字符串的方法,并提到了其他转换说明符和标记的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、格式化输出

1. 打印整数

转换说明符说明
d按有符号十进制整数显示
i按有符号十进制数显示(在scanf函数中,说明符i与d的含义不同)
o按无符号的八进制整数显示
u按无符号的十进制整数显示
x或X按无符号的十六进制显示(x将显示0~9和a~f,而X将显示0~9和A~F)
h或l写在任意一个整数转换说明符前面,分别表示将要显示的是一个短整数或长整数
#include <stdio.h>
int main()
{
    printf("%d\n", 455);
    printf("%i\n", 455);
    printf("%d\n", +455);
    printf("%d\n", -455);
    printf("%hd\n", 32000);
    printf("%ld\n", 2000000000L);
    printf("%o\n", 455);
    printf("%u\n", 455);
    printf("%u\n", -455);
    printf("%x\n", 455);
    printf("%X\n", 455);
    return 0;

}
结果
455
455
455
-455
32000
2000000000
707
455
4294966841
1c7
1C7

2. 打印浮点数

转换说明符说明
e或E以指数形式显示一个浮点数
f以小数点固定的形式显示一个浮点数
g或G根据绝对值大小,采用f浮点形式或e(E)指数形式显示一个不带末尾0的浮点数。若浮点数转换成指数形式后,一个浮点数的幂值小于-4或者大于等于指定的精度(默认情况下,g或G格式输出6位有效数字),则采用转换说明符e(E)来打印这个浮点数,否者采用转换说明符f来打印这个浮点数
L放在任意一种浮点数转换说明符前面,表示打印的是一个长双精度(long double)的浮点数

默认情况下,用转换说明符e、E、f显示的浮点数在小数点后面有6位的精度

#include <stdio.h>
int main()
{
    printf("%e\n", 1234567.89);
    printf("%e\n", +1234567.89);
    printf("%e\n", -1234567.89);
    printf("%E\n", 1234567.89);
    printf("%f\n", 1234567.89);
    printf("%g\n", 1234567.89);
    printf("%G\n", 1234567.89);
    return 0;
}
结果
1.234568e+006
1.234568e+006
-1.234568e+006
1.234568E+006
1234567.890000
1.23457e+006
1.23457E+006

3. 打印字符或字符串

c表示打印一个字符,s表示打印一个字符串

#include <stdio.h>
int main()
{
    char character = 'A';
    char string[] = "This is a string";
    const char *stringPtr = "This is also a string";
    printf("%c\n", character);
    printf("%s\n", "This is a string");
    printf("%s\n", string);
    printf("%s\n", stringPtr);
    return 0;
}
结果
This is a string
This is a string
This is also a string

4. 其他转换说明符

转换说明符说明
p用系统实现时所定义的方式显示一个指针
n保存当前printf语句中已经输出的字符的总数。需要提供一个指向整形变量的指针作为相应的实参。什么也不显示
%显示一个百分号

5. 标记

标记说明
-在域宽内左对齐显示输出结果
+在整数前显示+,在负数前显示-
空格在没有打印加号的正数前打印一个空格
#当使用八进制转换说明符o时,在输出数据前加上前缀o。当使用十六进制说明符x或X时,在输出数据前加上前缀0x或0X。当使用说明符e、E、g或G打印的浮点数没有小数部分时,强制显示一个小数点。对于g或G转换说明符,末尾的0不会被删除
0(零)在打印数据前面加上前导0以填满域宽
#include <stdio.h>
int main()
{
    printf("%d\n%d\n", 786, -786);
    printf("%+d\n%+d\n", 786, -786);
    printf("% d\n% d\n", 786, -786);
    int c = 1427;
    double p = 1427.0;
    printf("%#o\n", c);
    printf("%#x\n", c);
    printf("%#X\n", c);
    printf("\n%g\n", p);
    printf("\n%#g\n", p);
    printf("%+09d\n", 452);
    printf("%09d\n", 452);
    return 0;
}
结果
786
-786
+786
-786
(空格)786
-786
02623
0x593
0X593
1427
1427.00
+00000452
000000452

二、格式化输出

转换说明符说明
d读入一个任意符号的十进制整数。相应的实参是一个指向整型变量的指针
i读入一个任意符号的十进制、八进制或十六进制的整数,相应的实参是一个指向整型变量的指针
o读入一个八进制整数。相应的实参是一个指向无符号整型变量的指针
u读入一个十进制整数。相应的实参是一个指向无符号整型变量的指针
x或X读入一个十六进制的整数。相应的实参是一个指向无符号整型变量的指针
h或l写在任意整型转换说明符前面,表示将要输入的是一个短整型数据或长整型数据
e、E、g或G读入一个浮点数。相应的实参是一个指向浮点类型变量的指针
l或L写在任意一个浮点型转换说明符前面,表示将要输入的是一个双精度或长双精度浮点数
c读入一个字符。相应的实参是一个指向字符型变量的指针。不会加上字符串结束符(’\0’)
s读入一个字符串。相应的实参是一个指向字符型数组的指针。数组大小必须足以容纳输入的字符串以及系统自动加上的字符串结束符
[扫描字符]扫描一个字符串以查找事先存储在一个数组中的一组目标字符
p按照printf语句用%p输出的地址格式相同的格式读入一个地址
n保存到目前为止本次scanf函数调用以输入的字符总数。相应的实参是一个指向整型变量的指针
%在输入中忽略一个百分号

转载请说明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值