prec 有几种情况
正整数的最小位数。
在浮点型数中代表小数位数。
在%g 格式代表有效位数的最大值。
在%s格式代表字符串的最大长度。
若为*符号则代表下个参数值为最大长度。
width为参数的最小长度,若此栏并非数值,而是*符号,则表示以下一个参数当做参数长度。
flags 有下列几种情况:
+ 一般在打印负数时,printf()会加印一个负号,整数则不加任何负号。此旗标会使得在打印正数前多一个正号(+)。
# 此旗标会根据其后转换字符的不同而有不同含义。当在类型为o 之前(如%#o),则会在打印八进制数值前多印一个o.而在类型为x 之前(%#x)则会在打印十六进制数前多印'0x',在型态为e、E、f、g或G 之前则会强迫数值打印小数点。在类型为g 或G之前时则同时保留小数点及小数位数末尾的零。
0 当有指定参数时,无数字的参数将补上0.默认是关闭此旗标,所以一般会打印出空白字符。
返回值 成功则返回实际输出的字符数,失败则返回-1,错误原因存于errno中。
范例
[cpp]
#include<stdio.h>
main()
{
<span style="white-space:pre"> </span>int i = 150;
<span style="white-space:pre"> </span>int j = -100;
<span style="white-space:pre"> </span>double k =3.14159;
<span style="white-space:pre"> </span>printf("%d %d%f\n"I, j, k);
<span style="white-space:pre"> </span>printf("%5d%*d\n", i, 5, i); /* 参数5会代入格式*中,而与%5d同意义 */
}
执行结果:
150 -100 3.141590
150 150
4. sacnf(格式化字符串输入)
相关函数 fscanf,snprintf
表头文件 #include<stdio.h>
定义函数 intscanf(const char * format,……);
函数说明 scanf()会将输入的数据根据参数format字符串来转换并格式化数据。Scanf()格式转换的一般形式如下:
%[*][size][l][h]type
以中括号括起来的参数为选择性参数,而%与type则是必要的。
选择性参数:
* 代表该对应的参数数据忽略不保存。
size 为允许参数输入的数据长度。
l 输入的数据数值以long int 或double型保存。
h 输入的数据数值以shortint 型保存。
type的几种形式:
%d 输入的数据会被转成一有符号的十进制数字(int)。
%i 输入的数据会被转成一有符号的十进制数字,若输入数据以"0x"或"0X"开头代表转换十六进制数字,若以"0"开头则转换八进制数字,其他情况代表十进制。
%0 输入的数据会被转换成一无符号的八进制数字。
%u 输入的数据会被转换成一无符号的正整数。
%x 输入的数据为无符号的十六进制数字,转换后存于unsigned int型变量。
%X 同%x
%f 输入的数据为有符号的浮点型数,转换后存于float型变量。
%e 同%f
%E 同%f
%g 同%f
%s 输入数据为以空格字符为终止的字符串。
%c 输入数据为单一字符。
[] 读取数据但只允许括号内的字符。如[a-z].
[^] 读取数据但不允许中括号的^符号后的字符出现,如[^0-9].
返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。
范例
[cpp]
#include<stdio.h>
main()
{
int i;
unsigned int j;
char s ;
scanf("%d %x %5[a-z] %*s %f",&i,&j,s,s);
printf("%d %d %s\n", i, j, s);
}
执行 100x1b aaaaaaaaaa bbbbbbbbbb
1027 aaaaa