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

do-while函数未返回值排查:counter函数无法返回年份值

代码错误排查与修复

存在的问题

  • printf语句永远无法执行:counter函数中return n;写在printf之前,一旦执行return,函数会直接退出,后续的printf完全没有运行机会。
  • 返回值未被处理:main函数调用counter后,没有接收返回的年份值,也没有输出结果,所以你看不到任何输出内容。
  • 参数冗余(可选优化):counter的n参数完全可以在函数内部初始化,不需要作为参数传入;x是值传递,修改的是副本,但不影响计算逻辑,只是可以优化得更简洁。

修复后的代码

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

int counter(int x, int y);

int main (void){
    // 输入起始种群数量
    int start;
    do{
        start = get_int("starting population no: ");
    }
    while( start < 9);

    // 输入结束种群数量
    int end;
    do {
        end = get_int("ending population no: ");
    }
    while (end < start);

    // 计算并输出所需年份
    int years = counter(start, end);
    printf("years: %i\n", years);
}

int counter(int x, int y){
    int n = 0;
    do {
        x = x + x / 3 - x / 4;
        n++;
    }
    while(x < y);
    return n;
}

修复说明

  1. 将输出逻辑移到main函数中,让counter专注于计算年份值,职责更清晰。
  2. main函数接收counter的返回值,然后打印结果,确保你能看到输出。
  3. 移除counter中冗余的n参数,在函数内部初始化年份计数器,简化函数接口。
  4. 循环逻辑保持正确:每次更新种群数量后年份加1,直到种群数量达到或超过结束值时停止循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:05:21