百分比符号之后的C 星号



以下是我代码的一部分。我想输入三个变量,即c,l和r。但是,当我从scanf语句中删除%*c时,循环不会在此之前执行所需的次数并终止。为什么是这样?%*C做什么?

scanf( "%d", &Q );
    for ( i = 0; i < Q; ++i ) {
        scanf( "%*c%c%d%d", &c, &l, &r );

它是分配抑制。从C11标准:

%之后,以下显示以下序列:

  • 可选分配支持字符 *

...

除非a *表示抑制分配抑制,否则转换的结果放在格式参数之后的第一个参数指向的对象中,该参数尚未收到转换结果

因此,对于 "%*c"的情况

如果要忽略一个参数 - 意思是解析但不要存储它 - 您可以将*放在scanf字符串中:

%*d解析整数,但不要存储它。
%*c解析一个字符(任何字符,不一定是空格),但不要存储它。

通过从%*c%c删除%*c,您不会忽略第一个字符并将其分配给已安装的变量。

最新更新