文章目录
- printf()和scanf()的*修饰符
- C Primer Plus第4章编程题
1.printf()和scanf()的*修饰符
printf()和scanf()都可以用*修饰符来修改转换说明的含义。
printf()的*修饰符:如果你不想预先指定字段宽度,希望通过程序来指定,那么可以使用*修饰符代替字段宽度。但还是要用一个参数告诉函数,字段宽度应该是多少。也就是说,如果转换说明是%*d,那么参数列表中应该包含*和 d对应的值。
#include<stdio.h>
int main(void)
{
unsigned width,precision;
int number=256;
double weight=242.5;
printf("Enter a field width:\n");
scanf("%d,&width");
printf("The number is:%*d:\n",width,number);
printf("Now enter a width and a precision:\n");
scanf("%d %d",&width,&precision);
printf("Weight=%*.*f\n",width,precision,weight);
printf("Done!\n");
return 0;
}
变量width提供字段宽度,number是待打印的数字。因为转换说明中*在d的前面,所以在printf()的参数列表中,width在number的前面。
结果,用户首先输入6,因此6是程序使用的字段宽度。接下来,用户输入8和3,说明字段宽度是8,小数点后面显示第3委数字。一般而言,程序应该根据weight的值来决定这些变量。
scanf()中*的用法有所不同。把*放在%和转换字符之间,会使得scanf()跳过相应的输出项。
#include<stdio.h>
int main(void)
{
int n;
printf("Please enter three integers:\n");
scanf("%*d%*d%d",&n);
printf("The last integer was %d\n",n);
return 0;
}
运行结果: