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

为何我的C语言函数中第二个do-while循环无法运行?

解决get_ages函数中do-while循环失效及多值返回问题

问题分析

你的代码存在三个核心问题:

  • 函数声明与定义不匹配:声明int get_ages();无参数,但定义时写了int get_ages(int your_age, int friend_age),且参数未初始化,会触发未定义行为。
  • 过早return直接终止函数:第一个do-while循环内,刚获取your_age就执行return your_age;,函数直接退出,第二个循环永远无法执行。
  • 单函数无法返回两个整数:C语言函数只能返回单个值,想同时获取两个年龄,需要通过指针修改外部变量。

修正后的代码

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

// 声明:用指针参数接收两个年龄的地址
void get_ages(int *your_age, int *friend_age);

int main(void)
{
    int you, friend;
    // 传入变量地址,让函数能修改外部变量
    get_ages(&you, &friend);
    printf("你的年龄:%i\n朋友的年龄:%i\n", you, friend);
}

// 获取年龄的函数:通过指针操作外部变量
void get_ages(int *your_age, int *friend_age)
{
    // 循环验证自己的年龄,直到输入合法
    do
    {
        *your_age = get_int("请输入你的年龄:");
    }
    while (*your_age < 1);

    // 循环验证朋友的年龄,直到输入合法
    do
    {
        *friend_age = get_int("请输入你朋友的年龄:");
    }
    while (*friend_age < 1);
}

关键修改说明

  1. 函数返回类型改为void,通过指针参数传递变量地址,实现函数对外部变量的修改。
  2. 移除每个do-while内的return语句,确保第一个循环执行完成后,程序会继续执行第二个循环。
  3. 统一函数声明与定义的参数类型,调用时通过&取地址符传入变量的内存地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:20:33