本章学习链接如下:
二、C语言数据类型与变量(scanf和printf (2))
二、C语言数据类型与变量(scanf和printf (3))
二、C语言数据类型与变量(scanf和printf (4)完)
在之前的学习中我们已经运用了printf,\n,#include<stdio.h>,等等来书写我们的代码,\n我们之前已经了解到了是转义字符,起到换行作用,可在一句末尾换行,也可以在需要换行的文本中间换行。
1.printf 含义
printf( )
的作⽤是将参数文本输出到屏幕。
f 代表 format (格式化),表示可以定制输出文本的格式。
printf( )不会自动换行,就算是写两行不同的printf()也不会自动换行
printf( )是在标准库的头文件<stdio.h>里面定义的,如果想使用printf ( ),就必须在代码开头添加#include<stdio.h>
#include<stdio.h>
int main()
{
printf("hello\n world\n");//文本内部也可以换行
printf("hello world\n");
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/35ed465206b2eb5dbae1d3188c95df1b.png)
2.占位符,如%d,%c,%s,%f,%lf等的含义
占位符:先用这个符号占着位置,具体内容后面输入
1)占位符列举
•
%a
:⼗六进制浮点数,字⺟输出为⼩写。
•
%A
:⼗六进制浮点数,字⺟输出为⼤写。
•
%c
:字符。
•
%d
:⼗进制整数。
•
%e
:使⽤科学计数法的浮点数,指数部分的
e
为⼩写。
•
%E
:使⽤科学计数法的浮点数,指数部分的
E
为⼤写。
•
%i :整数,基本等同于
%d 。
•
%f
:⼩数(包含
float
类型和
double
类型)。
•
%g
:6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的
e
为⼩写。
•
%G
:等同于
%g
,唯⼀的区别是指数部分的
E
为⼤写。
•
%hd
:⼗进制 short int 类型。
•
%ho
:⼋进制 short int 类型。
•
%hx
:⼗六进制 short int 类型。
•
%hu
:unsigned short int 类型。
•
%ld
:⼗进制 long int 类型。
•
%lo
:⼋进制 long int 类型。
•
%lx
:⼗六进制 long int 类型。
•
%lu
:unsigned long int 类型。
•
%lld
:⼗进制 long long int 类型。
•
%llo
:⼋进制 long long int 类型。
•
%llx
:⼗六进制 long long int 类型。
•
%llu
:unsigned long long int 类型。
•
%Le
:科学计数法表⽰的 long double 类型浮点数。
•
%Lf
:long double 类型浮点数。
•
%n
:已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
•
%o
:⼋进制整数。
•
%p
:指针。
•
%s
:字符串。
•
%u
:⽆符号整数(unsigned int)。
•
%x
:⼗六进制整数。
•
%zd
:
size_t
类型。
•
%%
:输出⼀个百分号。
比如,我想打印一段话,我叫Xiaoming,今年15岁,身高165.5cm,A型血;
我叫Lincaicai,今年14岁,身高170cm,O型血。
我们可以看到,并没有输出我们想要的数165.5,这是由于C语言中默认浮点数%f,精确到小数点后六位,如果我们想控制小数点的输出位数,则用%.1f用做输出1位小数的占位符。见下段。
2)需要输出的具体字符串用双引号“ ”引起来
3)单个字符用单引号' '
4)数字不需要引号
#include<stdio.h>
int main()
{
printf("我叫%s,今年%d岁,身高%fcm,%c型血;\n" , "Xiaoming", 15, 165.5, 'A');
printf("我叫%s,今年%d岁,身高%dcm,%c型血。" ,"Lincaicai", 15, 170,'O');
return 0;
}
输出结果:
我叫Xiaoming,今年15岁,身高165.500000cm,A型血;
我叫Lincaicai,今年15岁,身高170cm,O型血。
3.如何控制输出的浮点数的小数点后几位,如%.2f表示输出小数点后两位。
#include<stdio.h>
int main()
{
printf("我叫%s,今年%d岁,身高%.1fcm,%c型血;\n" , "Xiaoming", 15, 165.5, 'A');
printf("我叫%s,今年%d岁,身高%dcm,%c型血。" ,"Lincaicai", 15, 170,'O');
return 0;
}
输出结果:
我叫Xiaoming,今年15岁,身高165.5cm,A型血;
我叫Lincaicai,今年15岁,身高170cm,O型血。
4.限制占位符输出的最小宽度
printf()中可以限定占位符的最小宽度
%12d
表示这个占位符的宽度至少为12位。如果不满12位,对应的值的前面会添加空格.
比如当我们输出一个浮点数,默认显示精度是后6位,当我们输入如下代码:
输出结果为“ 123.120000”前面有两个空格,这是因为C语言中默认右对齐。
如果想左对齐,可以添负号写成%-12d
#include<stdio.h>
int main()
{
printf("%12f",123.12);//输出“ 123.120000”
return 0;
}
#include<stdio.h>
int main()
{
printf("%-12f", 123.12);//输出“123.120000 ”
return 0;
}
5. 限制占位符输出的最小宽度和小数精度可以同时使用
形如%6.2f,即可以输出小数点后两位,且总体宽度为6的浮点数,小数点占一位宽度
#include<stdio.h>
int main()
{
printf("%6.2f", 123.12);//输出“123.12”
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/87075da0600ee1e4917ef7ebd26889ce.png)
6. 限制占位符输出的最小宽度和小数精度可以同时使用,这两个值可以用星号*代替,后面再输入
如下图代码所示,需要的宽度和精度数值是6和2,%6.2f
#include<stdio.h>
int main()
{
printf("%*.*f",6,2, 123.12);//输出“123.12”
return 0;
}
7.printf()里的正负号问题
默认情况下,
printf()
不对正数显示 +
号,只对负数显示
-
号。如果想让正数也输出
+
号,可
以在占位符的
%
后⾯加⼀个
+
。在%后面加+号 ,可以确保输出的数带有符号,而不是%后面写正号就是整数,负号就是负数
![](https://i-blog.csdnimg.cn/blog_migrate/4472e6e146a5303d714a17dbd1234c65.png)
8.限制输出的字符串的宽度%.数字s
使用形如%.3s 的占位符,3代表想要输出的字符串的宽度是3,可以是任意正整数,空格也算宽度
#include<stdio.h>
int main()
{
printf("%.3s\n", "hello");//输出“hel”
printf("%.3s\n", "he llo");//输出“he ”
return 0;
}