为什么尽量不要将try…catch写在循环中?

2024-11-23 10:04:12
推荐回答(2个)
回答(1):

循环语句不能用try...catch,而要用do...loop语句。
循环结构允许重复一行或几行代码。循环结构有Do…Loop、For…Next和For Each…Next结构。
用Do循环重复一个语句块,且重复次数不定。Do…Loop语句有几种变化形式,但每种形式都以计算数值为条件以决定是否继续重复。和判定结构一样,条件必须是一个数值或者值为非零或零的表达式。
在当循环中,只要条件为True就执行条件:
Do While 条件
语句
Loop
当Visual Basic重复这个Do循环时会首先测试条件,如果条件为零,则跳过所有语句,如果条件为非零,则Visual Basic执行语句,然后退回到Do While语句再测试条件。
因此,只要条件为True,循环可以随意重复多少次。如果一开始就为False,则不会重复语句。
Do…Loop语句的另一种演变形式是先重复语句,然后每次执行后测试条件,保证语句块至少重复一次:
Do
语句
Loop While 条件
直到循环,是指条件为假时,就重复循环。
循环零次或几次的一个循环结构是:

Do Until 条件
语句
Loop
至少循环一次的循环结构为:
Do
循环
Loop Until 条件
希望我能帮助你解疑释惑。

回答(2):

try ... catch是异常捕获语句,但是不是普通语句,不普通在于,一旦出现异常,后面的语句不再执行,直接执行catch段的语句,原来中断的地方不能继续。
我们写循环,为的是能够重复地个过程。在这个过程中,尽量不出现不可控的中断。这与我们主动break是两回事。
因此,合适的做法是,尽可能避免异常数据的输入,或者出现异常时,提示操作者,让操作者选择下一步的动作。
比如,一个程序,要求输入整数在1~100之间,如果输入了超出范围的数,就出现异常了。可以在输入时就检验,如果超出范围,要求重新输入。
while (scanf("%d",&a),(a<1)||(a>100)) printf("超出1~100,重新输入\n");