我偶然发现了这段代码,但我一直无法弄清它的目的或者它是如何工作的:
int word_count;
scanf("%d%*c", &word_count);
我最初的想法是%*d
是在引用一个char
指针或禁止word_count
接受char
变量。
有人能解释一下吗?
我偶然发现了这段代码,但我一直无法弄清它的目的或者它是如何工作的:
int word_count;
scanf("%d%*c", &word_count);
我最初的想法是%*d
是在引用一个char
指针或禁止word_count
接受char
变量。
有人能解释一下吗?
*c
表示将读取一个字符但不会被赋值,例如对于输入"30a",它会将30分配给word_count
,但忽略'a'。
每个转换说明符都由字符
%
引入。在%
之后,按照以下顺序出现:— 可选的禁止赋值字符
*
。
— [...]
— 转换说明符字符
关于行为方面,
[...] 除非使用
*
指示了禁止赋值,否则转换的结果将被放置在已经接收到转换结果的格式参数后的第一个参数所指向的对象中。[...]
这意味着,在格式说明符"%*c"
的情况下,将从stdin
读取一个char
,但扫描到的值不会被存储或分配给任何东西。因此,您不需要提供相应的参数。
因此,在这种情况下,
scanf("%d%*c", &word_count);
这是一个完全有效的陈述。
例如,在*nix环境中,它的作用是清除输入缓冲区中由于按下ENTER键后存储的newline
。