这是一个例子。对于小型程序,它很好用,但是如果我们正在开发实时项目或应用程序,该怎么办。需要一些建议
while (TRUE )
{
int temp =0 ;
printf ( "How many no's would you like to enter : " ) ;
temp = scanf ( "%d" , &n ) ;
if ( temp==1 )
break ;
else
{
printf ("Invalid input. Try again. \n" ) ;
fflush ( stdin ) ;
}
}
无论是while(TRUE)
还是while(condition)
,任何循环的问题都是它们倾向于潜行无限循环条件-像这样。
OP的代码取决于scanf("%d",...
,:1
和的2个结果not 1
。
如果用户输入"123"
,一切都很好。scanf()
返回1
,循环退出,我们都离开了工作并喝了一品脱。
如果用户输入的"abc"
,scanf()
回报0
,代码做了fflush(stdin)
清空stdin
。(这实际上是UB,但让我们假装它可以工作。)代码循环,再次提示,我们的饮料变热,但希望我们最终会输入数字。
但是让我们想象用户关闭了stdin
-也许代码已经重定向了输入并scanf()
最终返回EOF
。代码会循环,但fflush(stdin)
不会重新打开stdin
,然后scanf()
再次返回EOF
-一次又一次-真正的无限循环-代码不会暂停输入,而只会说““无效的输入。再试一次。”翻译成“傻瓜,傻瓜,傻瓜……”。看起来工作人员会在没有我们的情况下开始酿造啤酒。
故事的寓意:代码按预期工作时循环播放(用户输入了良好的数据)。当功能在意外情况下循环时,请注意循环。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句