这是一个例子。对于可以使用的小程序,但是如果我们正在开发实时项目或应用程序会怎样。需要一些建议
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 ) ;
}
}
答案 0 :(得分:0)
如果你问的是风格,建议会有点主观。
如果你担心你的循环可能在不受欢迎时变成真正的无限循环,那么你需要对此做些什么。例如:
答案 1 :(得分:0)
任何循环的麻烦,无论是while(TRUE)
还是while(condition)
,都是他们倾向于有一个潜行的无限循环条件 - 就像这个一样。
OP的代码取决于scanf("%d",...
,1
和not 1
的2个结果。
如果用户输入"123"
,一切都很好。 scanf()
返回1
,循环退出,我们都离开了工作并且有一品脱。
如果用户输入"abc"
,scanf()
返回0
,则代码执行fflush(stdin)
以清空stdin
。 (这真的是UB,但让我们假装它有效。)代码循环,再次提示,我们的饮料变暖,但希望我们最终会输入数字。
但是让我们想象一下用户关闭stdin
- 也许代码重定向输入,scanf()
最终返回EOF
。代码循环,但fflush(stdin)
不会重新打开stdin
,而scanf()
会再次返回EOF
- 并且一次又一次 - 真正的无限循环 - 代码不会暂停输入,只是说“”输入无效。再试一次。“这意味着”愚蠢的家伙,愚蠢的家伙,愚蠢的家伙......“看起来工作人员将在没有我们的情况下开始酿造。
故事的道德:当代码按预期工作时循环(用户输入了良好的数据)。当函数循环出现意外时,请注意循环。