c语言用scanf( )时遇到一个难题
inta,b,c;while(scanf("%d%d%d",&a,&b,&c)!=3)continue;我想做出的功能是:当输入的不是3个整数时,从新输入,要怎样才能做成...
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c)!=3)
continue;
我想做出的功能是 : 当输入的不是3个整数时,从新输入,要怎样才能做成呢~?
如果输入的是:1 2 3 4 (我不要第四个数,我想它能continue,但它就不给continue,会把4移到下次输到首位) 展开
while(scanf("%d%d%d",&a,&b,&c)!=3)
continue;
我想做出的功能是 : 当输入的不是3个整数时,从新输入,要怎样才能做成呢~?
如果输入的是:1 2 3 4 (我不要第四个数,我想它能continue,但它就不给continue,会把4移到下次输到首位) 展开
4个回答
展开全部
这个小问题还真是很让人费神的。
首先,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 按格式串去转换,如你的例子, 当输入串中不够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);
while(a!=3)
scanf("%d",&a);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int main()
{
int pasworld=0 ;
while( pasworld!=3)
{
printf("输入错误");
return;
puts("请输入密码:");
scanf("%d",&passworld);
if( pasworld==3)
{
puts("密码正确");
}
}
}
{
int pasworld=0 ;
while( pasworld!=3)
{
printf("输入错误");
return;
puts("请输入密码:");
scanf("%d",&passworld);
if( pasworld==3)
{
puts("密码正确");
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询