scanf函数中*修饰符的作用,如:%*d

在scanf函数中,*修饰符可以跳过所在项的输入。如下:

#include <stdio.h>
int main()
{
    int a=0,b=0,c=0;
    printf("请输入:");
    scanf("%*d%d%d",&a,&b,&c);
    printf("a=%d,b=%d,c=%d",a,b,c);
    return 0;
}

依次输入1 2 3,运行结果:

请输入:1 2 3
a=2,b=3,c=0

这里三个%d对应三个输入,第一个%d用*修饰,所以其对应输入的1被直接跳过,然后2,3,分别被写进a,b,而c未被存入。

特别需要注意的是,*修饰跳过是跳过转换类型对应字节,如上例,输入的1,2,3分别占4字节(一个int类型的字节数),共12字节,跳过时即跳过前4字节。举个例子:

#include <stdio.h>
int main()
{
    char ch[4];
    printf("请输入:");
    scanf("%*c%s",ch);
    printf("%s",ch);
    return 0;
}

这里我们输入ABCD,结果如下:

请输入:ABCD
BCD

这里就非常明显,ABCD共4字节,而%*c跳过了1字节,剩下3字节存入ch中,所以打印为BCD。

猜你喜欢

转载自www.cnblogs.com/juzer/p/12374923.html