所以我偶然发现了这段代码,但我还没有弄清楚它的用途是什么,或者它是如何工作的:
int word_count;
scanf("%d%*c", &word_count);
我首先想到的是%*d
引用char
指针或禁止word_count
取char
个变量。
有人可以对此有所了解吗?
答案 0 :(得分:23)
"%*c"
中的assignment-suppressing character *
代表<p>
:如果此选项存在,则该函数不会将转换结果分配给任何接收参数。 1 因此,字符将被读取但不会分配给任何变量。
<子>的脚注:强> 子>
<子> 1。 fscanf 子>
答案 1 :(得分:21)
*c
表示将读取一个字符但不会被分配,例如输入“30a”它将30分配给word_count
,但“a”将被忽略。
答案 2 :(得分:12)
引用C11
标准,章节§7.21.6.2, fscanf()
[...]每个转换规范都由字符
%
引入。 在%之后,以下顺序出现:- 可选的分配抑制字符
*
- [...]
- 转换说明符字符
并且关于行为,
[..]除非
*
表示分配抑制,否则 转换结果放在下面第一个参数指向的对象中 尚未收到转换结果的format参数。 [...]
这意味着,如果是"%*c"
这样的格式说明符,则会从char
中读取stdin
,但扫描的值不会被存储或分配给任何内容。因此,您无需提供相应的参数。
所以,在这种情况下,
scanf("%d%*c", &word_count);
是完全有效的语句。
例如,它在* nix环境中的作用是清除输入缓冲区中由于在输入后按 ENTER 键而存储的newline
输入缓冲区。