以下是我的代码中的一部分。我想输入三个变量,即c,l和r。但是当我从scanf语句中删除%* c时,循环不会执行所需的次数并在此之前终止。为什么会这样? %* c做了什么?
DateTime
答案 0 :(得分:4)
这是分配抑制。从C11标准:
在%之后,以下顺序出现:
- 可选的赋值抑制字符*
...
除非用*指示赋值抑制,否则转换的结果将放在由尚未收到转换结果的format参数后面的第一个参数指向的对象中
因此,对于"%*c"
的情况,从流中读取一个字符并将其丢弃(我猜在此应用程序中它会丢弃换行符。)
答案 1 :(得分:1)
如果你想忽略一个参数 - 意思是解析它但不存储它 - 你可以在*
字符串中添加scanf
:
%*d
解析整数,但不要存储它
%*c
解析一个角色(任何角色,不一定是空格),但不要存储它。
从%*c
删除%*c%c
,您不会忽略第一个字符并将其分配给已投入的变量。