6

我通常使用 获得一个字符%c,但我见过使用 的代码%*c%c。例如:

char a;
scanf("%*c%c", &a);

有什么不同?

4

3 回答 3

7

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

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

例如,使用:

char a;
scanf("%c", &a);

如果输入:xyz\n, (\n是换行符) 那么x将存储在 object 中a

和:

scanf("%*c%c", &a);

如果输入:xyz\ny将存储在 object 中a

C表示*scanf这种方式指定:

(C99, 7.19.6.2p10) 除非用 * 指示分配抑制,否则转换结果将放置在尚未收到转换结果的格式参数后面的第一个参数所指向的对象中。

于 2012-06-19T21:58:00.957 回答
5

根据维基百科

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

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

于 2012-06-19T21:33:55.253 回答
1

基本上%c指的是字符类型说明符,*% c用于排除一个字符,以便从控制台读取该字符,但不会将其分配给任何变量。例如。-:

假设输入是 2018年 12 月 31 日 ,并且您只想以整数形式输出并且想要排除 '/' 字符,那么您可以在此处使用 %*c 作为 - scanf("%d%*c%d%* c%d" , &day,&month,&year);

所以这样你将排除两个'/'字符。

以类似的方式%*d用于排除一个整数, %*f用于排除一个 float ,%*s用于排除字符串的一个单词。希望它有所帮助:)

于 2019-07-07T08:44:34.670 回答