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; }
修复说明
- 将输出逻辑移到
main函数中,让counter专注于计算年份值,职责更清晰。 main函数接收counter的返回值,然后打印结果,确保你能看到输出。- 移除
counter中冗余的n参数,在函数内部初始化年份计数器,简化函数接口。 - 循环逻辑保持正确:每次更新种群数量后年份加1,直到种群数量达到或超过结束值时停止循环。
内容的提问来源于stack exchange,提问作者ridzz
相关产品推荐
相关产品推荐

