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移到下次输到首位)
展开
 我来答
binglink
2012-04-02 · TA获得超过1101个赞
知道小有建树答主
回答量:639
采纳率:0%
帮助的人:453万
展开全部
这个小问题还真是很让人费神的。
首先,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");

}
xiaowei01357
2012-04-02 · TA获得超过241个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:90.4万
展开全部
你scanf()中只有三个 地址,所以他只能是 scanf() 返回 3,不会是其他的,所以你那个不能构成循环,对于下面那个问题,我想 你在输入完1 2 3 4之后,调用一下 flush()函数,清空一下缓存就可以解决这个问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hhmhfhhf
2012-04-02 · TA获得超过452个赞
知道答主
回答量:226
采纳率:0%
帮助的人:239万
展开全部
int a=0;
while(a!=3)
scanf("%d",&a);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
坑没有罪
2012-04-02
知道答主
回答量:30
采纳率:0%
帮助的人:10.4万
展开全部
int main()
{
int pasworld=0 ;
while( pasworld!=3)
{
printf("输入错误");
return;
puts("请输入密码:");
scanf("%d",&passworld);
if( pasworld==3)
{
puts("密码正确");
}

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式