scanf 格式说明符中的星号是啥意思? [复制]
Posted
技术标签:
【中文标题】scanf 格式说明符中的星号是啥意思? [复制]【英文标题】:What does an asterisk in a scanf format specifier mean? [duplicate]scanf 格式说明符中的星号是什么意思? [复制] 【发布时间】:2016-04-24 18:46:18 【问题描述】:所以我偶然发现了这段代码,但我无法弄清楚它的目的是什么,或者它是如何工作的:
int word_count;
scanf("%d%*c", &word_count);
我的第一个想法是 %*d
引用了 char
指针或禁止 word_count
获取 char
变量。
有人可以解释一下吗?
【问题讨论】:
见:The difference between %*c%c and %c fscanf documentation. 【参考方案1】:*c
表示将读取一个字符但不会分配,例如对于输入“30a”,它将为word_count
分配 30,但会忽略 'a'。
【讨论】:
@PeterA.Schneider 是的,谢谢【参考方案2】:"%*c"
中的*
代表assignment-suppressing character *
:如果存在此选项,则函数不会将转换结果分配给任何接收参数。1 所以字符将被读取但不会分配给任何变量。
脚注:
1。 fscanf
【讨论】:
【参考方案3】:引用C11
标准,第 7.21.6.2 章,fscanf()
[...] 每个转换规范都由字符
%
引入。 在 % 之后,依次出现以下内容:——一个可选的赋值抑制字符
*
。 — [...] — 转换说明符字符
关于行为,
[..] 除非
*
指示分配抑制,否则 转换的结果放在后面的第一个参数指向的对象中 尚未收到转换结果的格式参数。 [...]
这意味着,对于像"%*c"
这样的格式说明符,将从stdin
读取char
,但扫描的值不会被存储或分配给任何东西。因此,您无需提供相应的参数。
所以,在这种情况下,
scanf("%d%*c", &word_count);
是一个完全有效的陈述。
例如,它在 *nix 环境中的作用是从 newline
中清除输入缓冲区,该缓冲区是由于在输入后按 ENTER 键而存储的。
【讨论】:
以上是关于scanf 格式说明符中的星号是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章