我无法生成随机数字。由于某些原因,当我在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;
}
答案 0 :(得分:1)
此代码:
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;
}
在循环中定义新对象ranRow
,ranCol
,ranWidth
和ranHeight
。这些新定义会隐藏循环外的先前定义,并且循环外的对象不会更改。这导致它们不被赋值,因此后来使用它们具有未定义的行为。要解决此问题,请从循环内的语句中删除int
个关键字,因此它们是简单的赋值而不是定义。
(您的编译器应该警告您使用未初始化的对象。如果没有,请查找打开更多警告并默认使用它们的方法。)
在此代码中:
int ranNum = rand() % (numHigh) + numLow;
目前尚不清楚您是否真的想要(numHigh)
。您可能需要(numHigh-numLow)
或(numHigh-numLow+1)
。
在genRan
中更精确地使用范围可以消除使用while
循环来设置初始值。
如果generateDungeon
无意返回值,则应声明为:
void generateDungeon()