gpt4 book ai didi

c - C 中的 rand() 输出不在指定范围内的数字

转载 作者:行者123 更新时间:2023-11-30 14:51:22 27 4
gpt4 key购买 nike

我在生成随机数时遇到问题。由于某种原因,当我在 while 循环后打印随机数时,我得到了巨大的数字,并且有一些负数。不知道发生了什么,因此非常感谢任何帮助!

int genRan(int numHigh, int numLow){

int ranNum = rand() % (numHigh) + numLow;
return ranNum;

}

generateDungeon(){
int ranRow, ranCol, ranWidth, ranHeight;
for(int i = 0; i<5; i++){
bool check = false;
while(check == false){
int ranRow = genRan(18, 1);
int ranCol = genRan(77,1);
int ranWidth = genRan(8,3);
int ranHeight = genRan(7,2);
if((ranCol + ranWidth) <= 78 && (ranRow + ranHeight) <= 19){
check = true;
}

}
printf("%d\n", ranRow);
printf("%d\n", ranCol);
printf("%d\n", ranWidth);
printf("%d\n\n\n", ranHeight);

for(int x = ranCol; x<ranWidth + ranCol; x++){
for(int y = ranRow; y<ranHeight + ranRow; y++){
//dungeon[x][y] = '.';
}
//printf("%d ", x);
}
}
}

int main(){
srand(time(0));
generateDungeon();
//genRan();
return 0;
}

最佳答案

这段代码:

int ranRow, ranCol, ranWidth, ranHeight;
for(int i = 0; i<5; i++){
bool check = false;
while(check == false){
int ranRow = genRan(18, 1);
int ranCol = genRan(77,1);
int ranWidth = genRan(8,3);
int ranHeight = genRan(7,2);
if((ranCol + ranWidth) <= 78 && (ranRow + ranHeight) <= 19){
check = true;
}

在内部定义对象ranRowranColranWidthranHeight循环。这些新的定义将之前的定义隐藏在循环之外,并且循环之外的对象没有改变。这会导致它们没有被分配值,因此以后使用它们时会出现未定义的行为。要解决此问题,请从循环内的语句中删除 int 关键字,这样它们就是简单的赋值而不是定义。

(您的编译器应该警告您有关未初始化对象的使用。如果没有,请寻找打开更多警告并默认使用它们的方法。)

在此代码中:

int ranNum = rand() % (numHigh) + numLow;

尚不清楚您是否真的想要(numHigh)。您可能需要 (numHigh-numLow)(numHigh-numLow+1)

genRan中更精明地使用范围可以消除使用while循环来设置初始值。

如果 generateDungeon 不打算返回值,则应声明为:

void generateDungeon()

关于c - C 中的 rand() 输出不在指定范围内的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48362383/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com