CS50人口计算while循环‘小于’条件为何接受相等值?
CS50人口计算程序的输入验证问题修复
你的问题出在do-while循环的终止条件逻辑错误,和需求的判断逻辑完全反了:
问题分析
- 起始值验证:你需要的是“大于9的正整数”,但原代码的循环条件是
while (n < 9)——这意味着只要n≥9,循环就会终止。所以输入9时,9<9不成立,程序直接接受了不符合要求的输入。 - 结束值验证:你需要的是“大于起始值的正整数”,原代码条件是
while (x < n)——当x等于n时,x<n不成立,循环终止,程序接受了等于起始值的输入。
正确的处理方式
把两个循环的条件改成不满足需求时继续循环:
- 起始值:只要n≤9(即不大于9),就继续提示输入,条件改为
while (n <= 9) - 结束值:只要x≤n(即不大于起始值),就继续提示输入,条件改为
while (x <= n)
修正后的完整代码
#include <cs50.h> #include <stdio.h> int main(void) { // 提示输入起始人口(大于9) int n; do { n = get_int("Positive Integer Greater Than 9: "); } while (n <= 9); // 提示输入目标人口(大于起始值) int x; do { x = get_int("Positive Int. Greater Than Start: "); } while (x <= n); // 计算所需年数 int y = 0; do { n = n + (n / 3) - (n / 4); y++; } while (n < x); // 输出结果 printf("Years: %i\n", y); }
补充说明
你之前尝试把起始值条件改成n < 10,虽然对于整数来说,n <10和n <=9效果一样,但后者更贴合需求描述的逻辑——直接表达“不满足大于9”的情况,代码可读性更强,后续如果需求调整(比如要求大于10),修改起来也更直观。
内容的提问来源于stack exchange,提问作者detour
相关产品推荐
相关产品推荐

