printf的使用
定义函数 int printf(const char * format,…);
函数说明 printf()会根据参数format字符串来转换并格式化数据,然后将结果写出到标准输出设备,直到出现字符串结束(‘\n’)为止。
参数format字符串可包含下列三种字符类型:
(1)一般文本(即普通字符,如逗号、空格),伴随直接输出。
(2)转义字符,如\t、\n等。
(3)格式转换字符,格式转换为一个百分比符号(%)及其后的格式字符所组成。一般而言,每个%符号在其后都必需有一printf的参数与之相呼应(只有当%%转换字符出现时会直接输出%字符)
格式转换字符详解 “%[符号][宽度][.精度]类型”
[宽度]:表示输出的数据所占的列数,例若"%5d",表示输出数据占5列,输出的数据显示在此5列区域的右侧。
[符号]:“-”表示对齐方式
(1)%-8,左对齐,当显示字符不足8个时,右补空格
(2)%08,右对齐,当显示字符不足8个时,左补0
[.精度]对于浮点数表示小数点后的位数
数值小数点后的位数大于显示精度,则只能显示[.精度]个小数位数(四舍五入),如果数值小数点后的位数小于显示精度,则补零。%.5 小数点后显示5位
类型:
(1)%d:用于显示十进制有符号数,char,short,int,long long(若输出long(长整型)数据,在格式符d前加字母l(代表long).即"%ld".若输出long long(双长整型)数据,在格式符d前加两个字母ll(代表long long).即"%lld")
(2)%u:用于显示十进制无符号数,unsinged short,unsigned int,unsigned long long
(3)%x: 用于显示十六进制整数,所有有符号及无符号整型
(4)%f:用于显示十进制浮点数,float,double
基本型,用%f;不指定输出数据的长度,由系统根据数据的实际情况决定数据所占的列数。系统处理的方法一般是:实数中的整数部分全部输出,小数部分输出6位。
指定数据宽度和小数位数,用%m.nf;数值小数点后的位数大于显示精度,则只能显示[.精度]个小数位数(四舍五入),如果数值小数点后的位数小于显示精度,则补零。%.5 小数点后显示5位.例"%7.2"格式指定了输出的数据占7列,其中包括2位小数。如果把小数部分指定为0,则不仅不输出小数,而且小数点也不输出。例如"%7.0f"的话,之后输出整数部分。如果是1.0/3的,输出0;
(5)%c:显示字符(一个整数,若在0~127范围中,也可以用"%c"使之按字符形式输出,在输出前,系统会将该整数作为ASCII码转换为对应的字符)
(6)%s:显示字符串
(7)%e:指定以指数形式输出实数。
如果不指定输出数据所占的宽度和数字部分的小数位数,许多编译系统会自动给出数字部分的小数位数为6位,指数部分占5列(如e+002,其中"e"占1列,指数符号占1列,指数占3列),数值部分按标准化指数形式输出(即小数点前必须有而且只有1位非零数字):例如:printf(“%e”,123.456);输出为:1.234560 e+002(234560共6列,e+002共5列)共13列。
也可以用"%m.ne"形式的格式说明:如printf(“%e”,123.456);输出为: 1.23e+002数的前面有4个空格。
(8)i格式符:和d一样。
(9)o格式符:以八进制整数形式输出。将内存单元中的各位的值(0或1)按八进制形式输出。因此输出的数值不带符号。例如(int i=-1;printf(“%o”,i);输出为37777777777)
(10) g格式符:用来输出浮点数,系统自动选择f格式或e格式。选择其中长度较短的格式,不输出无意义的0.
printf(“%s”,xxx)与puts(xxx)的区别:puts函数会自动添加换行,而printf(“%s”,……)不会。
scanf的使用
定义函数 int scanf(const char * format,…);
函数说明 scanf()会将输入的数据根据参数format字符串来转换并格式化数据。Scanf()格式转换的一般形式如下:
“%[宽度][数据所占字节数]输入类型”
[宽度]:最多输入的字符个数
[数据类型]:
h表示两字节,短整型数据,short 如"%hd"
l表示八字节,用于long long和 double
什么都没有表示四字节
[数据类型]输入类型
(1)%d:int
(2)%f:float
(3)%lf:double
(4)%hd:short
scanf(“%c”,&x) 等价于 x = getchar(),虽然getchar的返回值是int类型,但不影响使用
(5)%s:字符串
用scanf读取字符串时,忽略前导的空白符,再次遇到空白符会结束输入,并将再次遇到的空白符留在缓冲区内,自动添加字符串数组的结束标志'\n'。
-注意:scanf("a=%f,b=%f,c=%f",&a,&b,c&);正确输入为:a=1,b=2,c=3 而如果只输入1 2 3就错了,因为系统会把它和scanf函数中的格式字符串逐个字符对照检查的,只是在%f的位置上代以一个浮点数。(在"a=1"的后面输入一个逗号,与scanf函数中的"格式控制"的逗号对应;scanf("a=%f b=%f c=%f",&a,&b,c&);正确输入为:a=1 b=2 c=3;scanf("a=%f:b=%f:c=%f",&a,&b,c&);正确输入为:a=1:b=2:c=3)
(6)%c:字符
用"%c"格式声明输入字符时,空格字符和"转义字符"中的字符都作为有效字符输入。例如:scanf("%c%c%c",&c1,&c2,&c3);输入时为abc(中间不能有空格)当输入a b c(会把第一个字符'a'送给c1,第二个字符时空格字符' ',送给c2,第三个字符b送给c3)
注意:在输入数据时,如输入空格、回车Tab键或非法字符(不属于数值的字符),认为该数据结束。例如scanf("%d%c%f",&a,&b,&c)若输入1234a123o.26;则会将1234给a,a给b,123给c,后边的无效。