C语言之printf()和scanf_s()的*修饰符

printf()和scanf_s()都可以使用*修饰符来修改转换说明的含义。

  1. 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_s("%d", &width);
 printf("The number is:%*d:\n", width, number);
 printf("Now enter a width and a precision:\n");
 scanf_s("%d%d", &width, &precision);
 printf("Weight = %*.*f\n", width, precision, weight);
 printf("Done!\n");
 getchar();
 
 return 0;
}

变量width提供字段宽度,number是待打印的数字。因为转换说明中*在 d的前面,所以在printf()的参数列表中,width在number的前面。同样,width 和precision提供打印weight的格式化信息在这里插入图片描述
这里,用户首先输入6,因此6是程序使用的字段宽度。类似地,接下来 用户输入8和3,说明字段宽度是8,小数点后面显示3位数字。一般而言,程 序应根据weight的值来决定这些变量的值.

2.scanf_s()的*修饰符
scanf()中*的用法与此不同。把*放在%和转换字符之间时,会使得 scanf()跳过相应的输出项。

#include<stdio.h>

int main(void)
{
 int n;
 
 printf("Please enter three integers :\n");
 scanf_s("%*d%*d%d", &n);
 printf("The last integer was %d\n", n);
 getchar();
 
 return 0;
}

在这里插入图片描述
确实跳过了前两项

发布了56 篇原创文章 · 获赞 18 · 访问量 3476

猜你喜欢

转载自blog.csdn.net/kangjielearning/article/details/104910766