这里的scanf("%*s");是什么作用

while ((status = scanf("%d", &code)) != 1 ||
           (code < 1 || code > 5))
  {
        if (status != 1)
              scanf("%*s");
        printf("Enter an integer from 1 to 5, please.\n");
  }

scanf("%*s")表示跳至下一空白字符,这里主要是中间的*字符起的作用,*的标准解释是滞后赋值

比如说 int n; scanf("%*d %*d %d",&n); printf("%d",n); return 0; 你输入的是1 2 3,那么输出的是3,因为前两个已经忽略啦。

这是标准化格式符,用%d举例,输入时如果在'%'后加上'*',则表示按照格式符读入一个数据,但是不存入变量里,比如'%*d',表示读入一个整数但不储存在变量中。
其余的比如在'%'后加一个数字,如'%6d',表示输出该变量的长度至少要为该数,长度不足补充空格,如 printf("%6d",1) ,会输出(5个空格)“     1”。这是右对齐,如果'%'后的数字为负数,则是左对齐,如 printf("%-6d",1) ,会输出“1     ”。
如果是浮点数的格式符('%f' '%lf' '%g'),在'%'加上小数点再加一个数字,则输出按四舍五入保留小数点后几位(好像最大是12位)。如printf("%.4lf",3.1415926) ,会输出“3.1416”

scanf("%*s",str)作用:忽略掉第一次输入的字符串! scanf("%*s",str)中,*在这里为跳过的意思,意为把从键盘输入的字符串忽略掉,不放入变量str中!

表示本输入项在读入后不赋值给相应的变量