C++ scanf和printf格式化输入输出
本文用于介绍scanf和printf的基本使用方法
1. scanf
数据类型 | 格式符 | 举例 |
---|---|---|
int | %d | scanf("%d",&n); |
long long | %lld | scanf("%lld",&n); |
float | %f | scanf("%f",&fl); |
double | %lf | scanf("%lf",&db); |
char | %c | scanf("%c",&c); |
char数组 | %s | scanf("%s",str); |
助记:需要把数据往一个地址中写。所以,第二个参数是地址,而数组名称本身就代表了数组第一个元素的地址。
例:
char str[10];
scanf("%s", str);//abc efg
printf("%s", str);//abc
注意:
%c
可以读取空格和换行,其他的格式符(包括%s
)都是以空白符(空格,换行)为结束判断标志的。除非使用%c
把空格按字符读入,其他情况都会自动跳过空格。string
类型不可以通过scanf
读取
string s1;
scanf("%s", s1);//abc
printf("%s", s1);//abc
但如果使用cin
来读取,printf
输出,就会得到帼n
。
是因为scanf对C++所有类都不支持,包括string。使scanf兼容string的解决方法自行百度吧,这里记录的是我常用的方法。
第3条会记录string的读取和输出方法。
2. printf
数据类型 | 格式符 | 举例 |
---|---|---|
int | %d | printf("%d",n); |
long long | %lld | printf("%lld",n); |
float | %f | printf("%f",fl); |
double | %f | printf("%f",db); |
char | %c | printf("%c",c); |
char数组 | %s | printf("%s",str); |
double类型的格式符是%f
,需要和scanf中的%lf
区分。建议浮点数就使用double类型,精度高。
输出格式
%[flags][width][.precision][length]格式字符
格式符 | 说明 | |
---|---|---|
flags | - | 靠左对齐 |
+ | 强制在正数前输出+,复数前输出- | |
# | 使用o,x,X时,在数据前加0,0x,0X | |
width | %md | 宽度,若数据小于宽度,在左边补上空格 |
%0md | 宽度,若数据小于宽度,在左边补上0 | |
.precision | p | 浮点数输出p位小数,不是四舍五入,四舍五入找round |
注意:
如果不加width,那么输出浮点数就会默认精确到小数点后6位。
例:
double d = 3.15;
printf("%.1f", d);//3.1