You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:52:40