作为scanf的格式说明符,%*c%c和%c之间有什么区别?

ild*_*0re 4 c special-characters

我通常会获得一个角色%c,但我看过使用过的代码%*c%c.例如:

char a;
scanf("%*c%c", &a);
Run Code Online (Sandbox Code Playgroud)

有什么不同?

Nic*_*ick 5

根据维基百科:

百分比符号后面的可选星号(*)表示此格式说明符读取的数据不存储在变量中.对于此删除的变量,不应包含格式字符串背后的参数.

这样您就可以跳过该星号匹配的字符.


oua*_*uah 5

scanf格式字符串中,在该字符之后%,该*字符是赋值抑制字符.

在您的示例中,它吃第一个字符但不存储它.

例如,用:

char a;
scanf("%c", &a);
Run Code Online (Sandbox Code Playgroud)

如果输入:xyz\n,(\n是新行字符),x则将存储在对象中a.

附:

scanf("%*c%c", &a);
Run Code Online (Sandbox Code Playgroud)

如果输入:xyz\n,y将存储在对象中a.

ç说指定*scanf这种方式:

(C99,7.19.6.2p10)除非用*指示赋值抑制,否则转换的结果将放在由尚未收到转换结果的format参数后面的第一个参数指向的对象中.