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

CS50人口计算while循环‘小于’条件为何接受相等值?

CS50人口计算程序的输入验证问题修复

你的问题出在do-while循环的终止条件逻辑错误,和需求的判断逻辑完全反了:

问题分析

  1. 起始值验证:你需要的是“大于9的正整数”,但原代码的循环条件是while (n < 9)——这意味着只要n≥9,循环就会终止。所以输入9时,9<9不成立,程序直接接受了不符合要求的输入。
  2. 结束值验证:你需要的是“大于起始值的正整数”,原代码条件是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:45:02