C printf()和scanf()的*修饰符
关于
printf()
和scanf()
有个神奇的*
修饰符,他和通配其实没什么关系,而且printf
和scanf
的作用不一样,所以一个个来看吧。
1#include <stdio.h>
2
3int main(void)
4{
5 unsigned width, precision;
6 int number = 256;
7 double weight = 242.5;
8
9 printf("What field width?\n");
10 scanf("%d", &width);
11 printf("The number is: %*d: \n", width, number);
12 printf("Now enter a width and a precision: \n");
13 scanf("%d %d", &width, &precision);
14 printf("Weight = %*.*f\n", width, precision, weight);
15 return 0;
16}
17
可以看出
1 printf("The number is: %*d: \n", width, number);
2
这里明明只有一个占位符却用了两个变量,实际上*
也可以看做占位符,取代他的就是width
的值,类似的可以看到
1 printf("Weight = %*.*f\n", width, precision, weight);
2
这样做的好处其实也很明显,可以自定义字符宽。
而在scanf()
中,又很显然不是这样的:
1#include <stdio.h>
2
3int main(void)
4{
5 int n;
6
7 printf("Please enter three integers: \n");
8 scanf("%*d %*d %d",&n);
9 printf("The last integer was %d\n", n);
10 return 0;
11}
12
这里又有一个会让人感到奇特的地方:
1 scanf("%*d %*d %d",&n);
2
三个占位符却只有一个变量,事实上,*
在scanf()
起到了忽略的作用,所以给n赋值的其实是最后输入的数
结果:
Please enter three integers:
2004 2005 2006
The last integer was 2006
这里还有一点 在%*d %*d %d
中每一个分割都有空格,因此输入时也必须有空格,如果是其他符号,类似。
评论 (0)