while ((status = scanf("%d", &code)) != 1 ||
(code < 1 || code > 5))//
{
if (status != 1)
scanf("%*s");//*号是为了跳过%s这个字符串,所以后面才没有跟其它参数
printf("Enter an integer from 1 to 5, please.\n");
}
scanf("%*s"); 表示从输入缓冲区读入一个字符串,但不保存该字符串(简单丢弃),放在这里是为了清除输入缓冲区中的非法输入。
还可以用正则表达式
比如 scanf("%[^0-9-]",&d);