携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
printf()和scanf()都可以使用* 修改转换说明的含义。但用法不一样。
printf()的*用法
如果你想通过程序来指定字段宽度,可以用* 修饰符代替字段宽度。但需要用参数告诉函数,字宽是多少。也就是说,如果转换说明是%*d,那么参数列表中应该包含 *和d对应的值。这个方法也可以用于浮点值指定精度和字段宽度。下面举个例子来验证这个方法。
简单举例
#include <stdio.h>
int main(){
unsigned width,precision;
int number = 256;
double weight = 242.5;
printf("Enter a field width:\n",width,number);
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的前面。同样的,width和precision提供打印weight个格式化信息。
用户首先输入一个5,因此5是程序使用的字段宽度。类似的,接下来用户输入9和7,说明字段宽度是9,后面小数点后面显示7位数字。一般而言,程序应根据weight的值来决定这些变量值。但scanf()和它用途不一样。
scanf()的* 用法
把* 放在%和转换字符之间时,会使得scanf()跳过相应的输入项。下面举一个相关例子:
简单举例
#include <stdio.h>
int main(){
int n;
printf("Please enter three integers:\n");
scanf("%*d %*d %d",&n);
printf("The last integer was %d\n",n);
return 0;
}
运行结果
scanf()指示:跳过两个整数,把第3个整数拷贝给n。
如果我们需要读取特定列内容时,这个功能还是比较重要的。
总结
- printf()的* 用来修饰符代替字段宽度。
- scanf()的* 用来跳过相应的输入项内容。