Joe*_*oel 29 c scanf char format-specifiers
所以我偶然发现了这段代码,我无法弄清楚它的用途是什么,或者它是如何工作的:
int word_count;
scanf("%d%*c", &word_count);
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是%*d
引用char
指针或word_count
不接受char
变量.
有人可以对此有所了解吗?
Sou*_*osh 12
引用C11
标准,章节§7.21.6.2,fscanf()
[...]每个转换规范都由角色引入
%
.在%之后,以下顺序出现:- 可选的赋值抑制字符
*
.
- [...]
- 转换说明符字符
并且关于行为,
[..]除非由a指示赋值抑制,否则
*
转换的结果将放在由尚未收到转换结果的format参数后面的第一个参数指向的对象中.[...]
这意味着,在类似格式说明符的情况下"%*c"
,char
将从中读取a ,stdin
但扫描的值将不会被存储或分配给任何内容.因此,您无需提供相应的参数.
那么,在这种情况下,
scanf("%d%*c", &word_count);
Run Code Online (Sandbox Code Playgroud)
是一个完全有效的声明.
例如,它在*nix环境中的作用是清除输入缓冲区,newline
因为ENTER输入后按键会存储输入缓冲区.