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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:36:16