【问题标题】:Random Number generator printing a pattern随机数生成器打印图案
【发布时间】:2021-12-07 15:06:02
【问题描述】:

我正在尝试创建一个掷骰子游戏,用户一次最多可以掷 6 个骰子。我试图通过将指针集成到我的代码中来实现这一点。我得到了一个输出,用户给出了所需的卷数,但输出不正确。它正在打印模式而不是打印随机数。任何帮助表示赞赏。

你想掷多少个骰子?
用户输入 4
输出 3 0 3 0

你想掷多少个骰子?
用户输入 5
输出 4 0 4 0 4

#include <stdio.h>
#include <stdlib.h>


void tossDie(int []);


int main() {

int diceArray[6] = { 0 };
int num = 0;
int x;


do {
    printf("\nHow many dice would you like to roll? Please enter here: ");
    scanf_s("%d", &num);//user enters amount of dice they want to roll)

    if (num < 1 || num > 6) {
        printf("\n\nPlease enter a number between 1 and 6.\n\n");
    }
} while (num < 1 || num > 6);


tossDie(diceArray);


//print dice roll numbers
for (x = 0; x < num; x++) {
    printf("%d ", diceArray[x]);
  }

  return 0;
}

 void tossDie(int numbers[]){

  int randomNum;
  int x;

  srand(time(NULL));
  randomNum = (rand() % 6) + 1;  //random # between 1 - 6


  for (x = 0; x < 6; x++){
      numbers[x] += randomNum;
      x++;
    }
  };

【问题讨论】:

  • 你有两次x++。而且你只会得到一个randomNum,而不是每次循环迭代的随机值,所以当然每个结果数字都是一样的。
  • srand 应该在程序启动时被调用一次。请参阅stackoverflow.com/questions/7343833/srand-why-call-it-only-once 了解更多信息。
  • 另外,srand() 必须只运行一次,在程序开始时,而不是在循环内调用的函数中,如这里(将它移到 main ())。

标签: arrays c pointers


【解决方案1】:
  • srand(time(NULL)); 移动到main()。只需要一次。

  • 仅在每个循环中调用 x++,而不是两次,以分配数组的所有 6 个元素。

  • randomNum = (rand() % 6) + 1; 移动到for 循环内部以获得不同的值。

  • 在使用num之前检查scanf_s("%d", &amp;num);的返回值是否为1。

提示:使用自动格式化程序可以节省时间并改进代码展示。

设计:我希望tossDie(int numbers[]) 也会收到一个num 来指示numbers[] 的宽度。

【讨论】:

    【解决方案2】:

    在我回答之前,请注意我不是用 C 编程的,所以我可能遗漏了一些特定于语言的东西。

    在您的 tossDie() 函数中,您设置了一次 randomNum 的值,但之后不要重新分配它。因此,您的输出应该为数组中的所有值返回相同的数字,如下所示:

    输入:5

    输出:3 3 3 3 3

    要解决这个问题,您应该将变量声明放在 for 循环中(如果您想使用变量)。

    此外,每次运行该方法时都会初始化随机变量。相反,您应该在 main 方法中声明一次。

    另外,这段代码有一个小问题:

    for (x = 0; x < 6; x++){
      numbers[x] += randomNum;
      x++;
     }
    };
    

    你在这里增加 x 两次:第一行和第三行。相反,您应该删除第三行中的 x++,只保留第一行中的 x++。

    如果您还有其他问题或仍有问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多