CS50第1周作业(Mario)代码输入验证逻辑异常问题咨询
理解do-while循环逻辑,解决Mario作业的输入判断问题
嘿,这个问题其实是对do-while循环的执行逻辑理解出现了小偏差,咱们一步步拆解清楚就明白了~
先搞懂do-while循环的核心规则
do-while循环的执行顺序是:先执行一次循环体里的代码,再判断条件。如果条件为真,就回到循环体继续执行;如果条件为假,就退出循环,执行后面的代码。简单说就是:条件成立时,循环继续;条件不成立时,循环终止。
分析你原来的代码逻辑
你最初的循环条件是(n < 8):
do { n=get_int("Size: "); } while (n < 8);
按照do-while的规则,这段代码的意思是:
- 先让用户输入一个数字赋值给
n - 然后判断
n < 8是否成立:- 如果成立(也就是用户输入1-7),就回到循环开头,继续让用户输入
- 如果不成立(也就是用户输入≥8),就退出循环,去执行后面打印#号的代码
这就刚好和你的需求相反了——你想要输入1-8时打印,结果现在只有输入≥8才打印,输入1-7会一直重复输入。
修改条件后为什么正常了?
当你把条件改成(n > 8)之后:
do { n=get_int("Size: "); } while (n > 8);
逻辑就变成了:
- 先让用户输入数字给
n - 判断
n > 8是否成立:- 如果成立(用户输入≥9),就继续循环,让用户重新输入
- 如果不成立(用户输入1-8),就退出循环,执行打印#号的代码
这完美匹配了你的需求:只有输入1-8才会执行打印,输入不符合要求的数字会一直提示重新输入。
总结一下关键点
写do-while循环时,一定要想清楚:什么样的情况需要让用户重复输入(也就是继续循环),把这个情况作为while后面的判断条件。你的需求是“输入大于8时需要重复输入”,所以条件就应该是n > 8,而不是反过来~
内容的提问来源于stack exchange,提问作者Alok Chedambath
相关产品推荐
相关产品推荐

