为何我的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); }
关键修改说明
- 函数返回类型改为
void,通过指针参数传递变量地址,实现函数对外部变量的修改。 - 移除每个do-while内的
return语句,确保第一个循环执行完成后,程序会继续执行第二个循环。 - 统一函数声明与定义的参数类型,调用时通过
&取地址符传入变量的内存地址。
内容的提问来源于stack exchange,提问作者user19847266
相关产品推荐
相关产品推荐

