【C语言】printf()和scanf()的*修饰符

*修饰符的含义是抑制赋值。
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");
    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;
}

在这里插入图片描述


再来看看scanf()的*修饰符:

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

举个例子:
#include <stdio.h>
int main()
{
    int n;

    printf("Please enter three integers:\n");
    scanf("%*d %*d %d", &n); // 跳过两个整数,把第3个整数拷贝给n
    printf("The last integer was %d\n", n);

    return 0;
}

在这里插入图片描述

在程序需要读取文件中特定列的内容时,这项跳过功能很有用。
发布了75 篇原创文章 · 获赞 267 · 访问量 5238

猜你喜欢

转载自blog.csdn.net/weixin_45961774/article/details/104828578