指示符 | 含义 |
---|---|
d | 待显示数字的最少个数(默认p为1),如果数字数量小于p,前面补零,直到数量等于p |
e | 显示指数(科学计数法)的浮点数,p指明小数点后的数字个数(默认p为6)。 |
f | 小数点后的数字个数(默认p为6)。 |
g | 指数形式或定点十进制的浮点数(不用于整数)。p指明有效数字的最大数量。与f不同,不显示尾随的0,如果数值没有小数点后的数字,就不会显示小数点。 |
int a = 10; printf("%3d\n", a); printf("%.3d\n", a); printf("%3.3d\n", a); printf("%4.3d\n", a);
输出
10 010 010 010
先做精度,再做最小栏宽
// 输入 printf("Item\tUnit\tPurchase\n\tPrice\tDate\n");
// 输出 Item Unit Purchase Price Date
printf("\"hello\"\n"); printf("\\");
"hello" \
可以包括普通字符和转换说明
检查转换说明数量和输入变量的数量相匹配,以及是否对应
符号&
寻找数的起始位置,会忽略空白字符(空格符,水平和垂直制表符,换页符和换行符)
参见P33详细解释
float类型输入 .3,会存入0.300000
输入3,存入3.000000
scanf("%d%d%f%f", &i, &j, &x, &y); // 输入为1-20.3-4.0e3\r //
对于scanf函数,换行等价于空格。
scanf("%d\n", &a); // 按回车没用,必须输入一个非空白字符 // 因为\n匹配任意多的空白符 scanf("%d\n%d", &a, &b); // 没事
Enter a number: 23foo
会将23存入变量,foo留到下一个scanf函数调用
Enter a number: foo
没有值被存入变量,foo留到下一个scanf函数调用
如何处理该情况呢
scanf("%*[^\n]");
读取换行符前的所有字符,但是不会存储(*表示赋值屏蔽)。唯一问题是不会读换行符,所以可能需要丢弃换行符
printf("Enter two fractions: "); scanf("%d / %d %d / %d", &a, &b, &c, &d); // 为什么:没有空格,输入是接着:的