C语言如何将number_generator生成的random_num正确返回main函数
问题原因
你的代码失效是两个基础语法问题导致的:
- C语言默认的参数传递规则是值传递:
number_generator的形参random_num和main函数里定义的random_num是两个完全独立的变量,你在函数内部给形参赋值,完全不会影响main里的原变量。你现在main里的random_num从来没有被正确赋值,输出0只是未初始化局部变量的偶然结果。 - 你给
number_generator定义的返回值类型是int,但函数末尾没有写return语句返回计算结果,本身就是不符合语法规范的写法。
修正方案
两种常规实现方式,优先选第一种:
方案1:通过返回值回传结果(最适配当前场景)
不需要给生成函数传参,直接让函数把生成的随机数作为返回值返回,在main中接收即可,修正后代码:
// 必须引入的头文件 #include <stdio.h> #include <stdlib.h> #include <time.h> // 提前声明函数原型 int number_generator(void); int main() { int random_num; random_num = number_generator(); // 接收函数返回的随机值 printf("random number: %d", random_num); return 0; } int number_generator(void) { srand(time(0)); // rand()%100 生成0-99的整数,要包含100的话改成rand()%101 int res = rand() % 100; return res; }
补充提示:
srand(time(0))是初始化随机数种子的操作,整个程序运行期间只需要调用1次即可,如果把它放在会被频繁调用的随机数生成函数里,短时间内多次调用会生成重复的数值。
方案2:通过指针传参直接修改原变量
如果需要通过传参的方式修改main内的变量,需要传入变量的内存地址(即指针类型参数),示例代码:
#include <stdio.h> #include <stdlib.h> #include <time.h> // 形参为int类型指针,用于接收变量地址 void number_generator(int *target); int main() { int random_num; number_generator(&random_num); // 传入random_num的内存地址 printf("random number: %d", random_num); return 0; } void number_generator(int *target) { srand(time(0)); // 对指针解引用,直接修改地址对应的原变量的值 *target = rand() % 100; }
内容的提问来源于stack exchange,提问作者Leeberichie
相关产品推荐
相关产品推荐

