百分比符号后面的c ++星号

时间:2016-06-19 05:40:17

标签: c++ c++11 input user-input scanf

以下是我的代码中的一部分。我想输入三个变量,即c,l和r。但是当我从scanf语句中删除%* c时,循环不会执行所需的次数并在此之前终止。为什么会这样? %* c做了什么?

DateTime

2 个答案:

答案 0 :(得分:4)

这是分配抑制。从C11标准:

  

在%之后,以下顺序出现:

     
      
  • 可选的赋值抑制字符*
  •   
     

...

     

除非用*指示赋值抑制,否则转换的结果将放在由尚未收到转换结果的format参数后面的第一个参数指向的对象中

因此,对于"%*c"的情况,从流中读取一个字符并将其丢弃(我猜在此应用程序中它会丢弃换行符。)

答案 1 :(得分:1)

如果你想忽略一个参数 - 意思是解析它但不存储它 - 你可以在*字符串中添加scanf

%*d解析整数,但不要存储它 %*c解析一个角色(任何角色,不一定是空格),但不要存储它。

%*c删除%*c%c,您不会忽略第一个字符并将其分配给已投入的变量。