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

CS50种群规模计算C代码输入end_size=100卡住,求排查及修复方案

问题排查与修复

问题根因

程序无响应是触发了死循环,核心问题出在种群计算的循环判断条件:

  • 你使用的判断条件是 while (start_size != end_size),要求起始规模必须完全等于结束规模才会退出循环,但种群增长是整数运算,每年的增长结果可能直接跳过你设定的结束规模,永远不会相等。
  • 以你输入的起始规模20、结束规模100为例:当规模增长到98时,下一年的计算结果为 98 + 98/3 - 98/4 = 98 + 32 - 24 = 106,直接从98跳到106,永远不会等于100,循环就会一直执行下去,表现为程序卡住。
  • 你之前输入结束规模1、10时,因为设置了结束规模的校验条件 while (end_size < start_size),所以程序会反复要求你重新输入,直到输入符合要求的100才进入计算逻辑。

修复方案

只需要把循环判断条件从判断「不等于」改成判断「小于」即可,只要规模达到或超过目标值就停止计算:
把原有代码中的

while (start_size != end_size)

修改为

while (start_size < end_size)

修复后完整代码

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    // 提示输入起始规模
    int start_size;
    do
    {
        start_size = get_int("Start Size: ");
    }
    while(start_size < 9);

    // 提示输入结束规模
    int end_size;
    do
    {
        end_size = get_int("End Size: ");
    }
    while (end_size < start_size);

    // 计算所需年数
    int year = 0;
    while (start_size < end_size)
    {
        start_size = start_size + (start_size / 3) - (start_size / 4);
        year++;
    }

    // 输出结果
    printf("Years: %i \n", year);
}

修改后运行测试,输入起始20、结束100时,程序会正确输出所需年数为20,不会再卡住。

内容的提问来源于stack exchange,提问作者Umar Asghar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:36:01