VB开发中Do循环内使用If语句时如何避免无限循环?
问题根因
- 你将
intFrom < intTo的判断逻辑写在了循环内部,当该条件不成立时,intNum += 1的赋值语句永远不会执行,intNum会始终停留在初始值1,永远无法达到循环终止条件intNum > intTo,因此会陷入无限循环。 - 按照需求「仅当From数值小于To数值时程序才继续执行」,该条件判断应该放在循环执行前,不需要放到循环内部重复校验。
修复后代码
Dim intFrom As Integer Dim intTo As Integer Dim intNum As Integer ' 先校验输入是否为合法整数 If Not Integer.TryParse(txtFrom.Text, intFrom) OrElse Not Integer.TryParse(txtTo.Text, intTo) Then MsgBox("请在From和To输入框中输入有效的整数") Exit Sub End If lstNumbers.Items.Clear() ' 外层判断是否满足执行条件,不满足直接跳过所有逻辑 If intFrom < intTo Then ' 此处如果你的需求是从起始值From开始输出,就用intFrom赋值 ' 如果需求固定从1开始输出,就改回intNum = 1 intNum = intFrom Do lstNumbers.Items.Add(intNum) intNum += 1 Loop Until intNum > intTo End If End Sub
优化说明
- 新增了输入合法性校验,避免用户输入非数字内容时,
TryParse默认返回0导致逻辑异常。 - 把大小判断移到循环外部,不满足条件时不会进入循环,彻底解决死循环问题。
- 修正了原代码中循环起始值固定为1的逻辑偏差,和你需求中「From为起始数值」的要求对齐,如果确实需要从1开始输出,修改intNum的初始值即可。
内容的提问来源于stack exchange,提问作者thatOneGuy
相关产品推荐
相关产品推荐

