------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、Printf的函数的介绍和注意事项
1、printf函数的介绍
printf是一个标准的库函数(系统提供的函数),可以以精确的格式输出程序运算的结果。
printf函数的调用格式:printf("格式控制字符串",输出列表)
例如:printf("%d,%d",a,b);
使用printf尽量包含一个头文件"stdio.h",若不包含则会出现警告。
格式字符串(格式控制符):
是由格式字符和普通字符组成,转换说明字符和%一起使用,用来说明输出数据的类型、标志、长度和精度。
输入项列表:
可以是常量、变量和表达式,也可以无输出。多个输出项用“,”隔开,而且输出项必须与格式字符串类型和数量上完全一一对应。
格式控制符:
%d 表示输出一个10进制的整数
%f 表示输出一个实数类型的数据 注意:%f默认输出6位小数,若小数部分不足6位,补0。
%m.nf m表示总的列数,n表示小数点后的位数,若输出的位数小于m从左边补空格
%-m.nf 表示若输出的位数小于m,从 右边补空格
%c 表示输出一个字符
%s 表示输出一个字符串
%o 表示把一个数据以8进制输出
%x 表示把一个数据以16进制输出
%p 输出变量的地址
例如:部分配图解释
#include <stdio.h>
int main(int argc,const char * argc[ ]){
//定义一个整型变量
int a=10;
printf("a=%d\n",a)
//定义一个实数类型(单精度)变量
float f1=3.14159f;
printf("f1=%f\n",f1)//%f默认输出6位小数,若小数部分不足6位,补0,具体可见下面的插图1
图 1
//若只要求打印2位小数输出结果可见图2
printf("f1=%.2f\n",f1)
图 2
//打印一个m.nf%的格式,如
一个总共6列,小数点后3位的数据,具体输出结果可见图 3
float f1=3.1415926f;
printf("f1=%6.3f\n",f1);
图 3
//定义一个字符变量
char ch='a';
printf("ch=%c\n",ch)
return 0;
这里重点介绍下%f的精度问题:
例如:
#include<stdio.h>
int main(int argc, const char * argc[ ]) {
//float类型的变量
float f1=3.1415926f;
//默认输出6位小数
printf("f1= %f\n",f1);
//打印7位小数
printf("f1=%.7\n",f1);//注意:打印出来后,精度小数点后6位,有效数字是7位
return 0;
}
输出结果见图 4 :
图 4
#include <stdio.h>
int main(int argc, const char * argc[ ]) {
//float类型的变量
float f1=3.1415926f;
//要打印3.1415926到底怎么破????
double d1=3.1415926;
//double打印出来后,double类型精度小数点后6位,有效数字是15位,故想要保留更多数位可用double类型
printf("d1=%.7f\n
",d1);
return 0;
}
输出结果见图 5 :
图 5
二、printf函数使用注意事项
1、域宽问题
%d 的拓展
1)%md:设置域宽问题,m的绝对值表示域宽,m可以是正数也可以是负数。
若输出的位数大于m,则按照数据实际位数输出
若输出的位数小于m的绝对值,m大于0时,则从输出的左侧开始补空白
m小于0时,则从输出的右侧补空白
2)%0md(%md的升级版):表示不足部分补0 常用
3)\t \n \r \\ %% 转义字符的问题
#include <stdio.h>
int main(int argc, const char * argc[ ]) {
//域宽小于m, m大于0,输出的左侧补空格
printf(%5d\n,10);//结果结果从左侧补3个空格
//若输出的位数大于m,则按照数据实际位数输出
printf(%3d\n,1888);//输出结果就是1888
// m小于0时,则从输出的右侧补空格
printf(%-5d\n,10);//输出结果为10右边加三个空格
转义字符的打印效果见图 6 :
图 6