这个小问题还真是很让人费神的。
首先,scanf 按格式串去转换,如你的例子, 当输入串中不够3个数时, 函数并不退出,一定要等到转换够了3个数, 除非是按Ctrl+z结束, 但这并不符合人们的输入习惯。
其次,当输入了多于3个数时, scanf只转换了前三个, 后边的会留在输入流中,等下一个输入语句读取。 这个倒是容易解决:可调用fflush(stdin);清空输入流。
我想了个小巧解决你的这个需求。 以下代码给你参考
int a,b,c,lost;
char buf[100];
while(1)
{
gets(buf);
// 这里用了个小花招,增加了一个无用数据变量lost, 用于检测输入了多于3个数的情况
if (sscanf(buf, "%d %d %d %d", &a,&b,&c,&lost) == 3)
break;
else
printf("请重新输入\n");
}
你scanf()中只有三个 地址,所以他只能是 scanf() 返回 3,不会是其他的,所以你那个不能构成循环,对于下面那个问题,我想 你在输入完1 2 3 4之后,调用一下 flush()函数,清空一下缓存就可以解决这个问题了
int a=0;
while(a!=3)
scanf("%d",&a);
int main()
{
int pasworld=0 ;
while( pasworld!=3)
{
printf("输入错误");
return;
puts("请输入密码:");
scanf("%d",&passworld);
if( pasworld==3)
{
puts("密码正确");
}
}
}