使用带返回值的函数遇异常:为何返回零?附C++代码求助
问题排查与修正方案
我帮你拆解这段代码里的几个核心问题,正是这些错误导致程序无法正常运行,甚至出现返回零的异常情况:
函数声明与定义不匹配,参数传递失效:你声明
randgen时用的是引用传递(int &y),但定义函数时写成了值传递(int y)。这就导致你在randgen里修改的y只是个局部副本,main函数里的y根本不会被更新,等于白忙活了一场。void类型函数不能返回值:
randgen被声明为void类型,代表它不需要返回任何结果,但你在函数末尾写了return num;,这是明显的语法错误,编译器会直接报错阻止程序运行。变量作用域越界:
num是main函数里的局部变量,randgen函数根本无权访问它,你在randgen里写num = y;会触发“num未声明”的编译错误。未初始化变量直接使用:
main里的num只声明了但没赋值,就直接cout<<num,这属于未定义行为,输出的零其实是随机的垃圾值,完全不可靠。另外还有个小细节:你声明了
doub函数但从来没调用过,属于冗余代码,虽然不影响运行,但建议删掉。
修正后的代码
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; void randgen(int &y); int main() { int y, num; randgen(y); num = y; // 将生成的随机数赋值给num cout << num << endl; } void randgen(int &y) { // 保持和声明一致的引用传递 unsigned seed = time(0); srand(seed); y = (rand() % (99 - 10 + 1)) + 10; // 生成10~99的随机整数 // void函数无需return语句 }
修正说明
- 补全了必要的头文件(原代码缺失
iostream、cstdlib、ctime,编译器会找不到cout、rand、time等函数); - 让
randgen的参数传递和声明一致,确保main里的y能被正确修改; - 移除了
void函数里的非法return语句; - 在
main里将生成好的y赋值给num后再输出,避免未初始化变量的问题。
内容的提问来源于stack exchange,提问作者NSbrian
相关产品推荐
相关产品推荐

