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中!
表示本输入项在读入后不赋值给相应的变量