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
相关产品推荐
相关产品推荐

