使用srand(time(NULL))每次运行程序时都会给出相同的输出(不是循环,播种的值足够大)[关闭]

问题描述 投票:-1回答:1

我一直在跟随Codecademy的课程学习C ++。我来到最后一个项目,我学会了制作像hangman一样的程序。我想添加一个单词列表,程序在每次运行程序时都会从中选择一个新单词。 (第5行)

#include "ufo.hpp"

int main() {

  srand (time(NULL));

  std::cout << "=============\n";
  std::cout << "UFO: The Game\n";
  std::cout << "=============\n";
  std::cout << "Instructions: save your friend from alien\nabduction by guessing the letters in the\ncodeword.\n";

  for (int i = 0; i < codeword.size(); i++) {
      answer.append("_");
  }

  while (answer != codeword && misses <= 6) {
      take_turn();
  }

  if (answer == codeword) {
      std::cout << "Hooray! You saved the person and earned a medal of honor!\n";
  } else {
      std::cout << "Oh no! The UFO just flew away with another person!\n";
      std::cout << "The codeword was: " << codeword << "\n";
  }

  return 0;
}

在上面的代码中,我在srand(time(NULL))函数中使用了mainrand_number变量可以在以下标题中找到:(第11行)

#include <iostream>
#include <vector>
#include <stdlib.h>
#include <time.h>

void display(int misses);

// Declare variables

std::vector<std::string> codewords = {"camera", "computer", "table", "desk", "bed", "chair", "drawer", "button", "elephant", "mouse", "printer", "soap", "toothbrush", "pillow", "curtain", "wall", "roof", "poster", "grasland", "woodpecker", "jacket", "trousers", "waterfall", "softdrink", "laundry"};
int rand_number = rand() % codewords.size();

std::string codeword = codewords[rand_number];
std::string answer;
int misses = 0;
std::vector<char> incorrect;
bool guess = false;
char letter;

// Define take_turn()

void take_turn() {

  display(misses);

  std::cout << "Please enter your guess: ";
  std::cin >> letter;

  for (int i = 0; i < codeword.size(); i++) {
    if (letter == codeword[i]) {
      answer[i] = letter;
      guess = true;
    }
  }

  if (guess) {
    std::cout << "Correct!\n";
  } else {
    std::cout << "Incorrect! The tractor beam pulls the person in further.\n";
    incorrect.push_back(letter);
    misses++;
  }

  std::cout << "==========================\n";

  std::cout << "Incorrect Guesses:\n";
  for (int i = 0; i < incorrect.size(); i++) {
    std::cout << incorrect[i] << " ";
  }

  std::cout << "\nCodeword:\n";

  for (int i = 0; i < answer.size(); i++) {
    std::cout << answer[i] << " ";
  }

  std::cout << "\n";

  guess = false;
}



void display(int misses) {

if (misses == 0 || misses == 1) {

std::cout << "                 .                            \n";
std::cout << "                 |                            \n";
std::cout << "              .-\"^\"-.                       \n";
std::cout << "             /_....._\\                       \n";
std::cout << "         .-\"`         `\"-.                  \n";
std::cout << "        (  ooo  ooo  ooo  )                   \n";
std::cout << "         '-.,_________,.-'    ,-----------.   \n";
std::cout << "              /     \\        (  Send help! ) \n";
std::cout << "             /   0   \\      / `-----------'  \n";
std::cout << "            /  --|--  \\    /                 \n";
std::cout << "           /     |     \\                     \n";
std::cout << "          /     / \\     \\                   \n";
std::cout << "         /               \\                   \n";

} else if (misses == 2) {

std::cout << "                 .                            \n";
std::cout << "                 |                            \n";
std::cout << "              .-\"^\"-.                       \n";
std::cout << "             /_....._\\                       \n";
std::cout << "         .-\"`         `\"-.                  \n";
std::cout << "        (  ooo  ooo  ooo  )                   \n";
std::cout << "         '-.,_________,.-'    ,-----------.   \n";
std::cout << "              /  0  \\        (  Send help! ) \n";
std::cout << "             / --|-- \\      / `-----------'  \n";
std::cout << "            /    |    \\    /                 \n";
std::cout << "           /    / \\    \\                    \n";
std::cout << "          /             \\                    \n";
std::cout << "         /               \\                   \n";

} else if (misses == 3) {

std::cout << "                 .                            \n";
std::cout << "                 |                            \n";
std::cout << "              .-\"^\"-.                       \n";
std::cout << "             /_....._\\                       \n";
std::cout << "         .-\"`         `\"-.                  \n";
std::cout << "        (  ooo  ooo  ooo  )                   \n";
std::cout << "         '-.,_________,.-'    ,-----------.   \n";
std::cout << "              /--|--\\        (  Send help! ) \n";
std::cout << "             /   |   \\      / `-----------'  \n";
std::cout << "            /   / \\   \\    /                \n";
std::cout << "           /           \\                     \n";
std::cout << "          /             \\                    \n";
std::cout << "         /               \\                   \n";

} else if (misses == 4) {

std::cout << "                 .                            \n";
std::cout << "                 |                            \n";
std::cout << "              .-\"^\"-.                       \n";
std::cout << "             /_....._\\                       \n";
std::cout << "         .-\"`         `\"-.                  \n";
std::cout << "        (  ooo  ooo  ooo  )                   \n";
std::cout << "         '-.,_________,.-'    ,-----------.   \n";
std::cout << "              /  |  \\        (  Send help! ) \n";
std::cout << "             /  / \\  \\      / `-----------' \n";
std::cout << "            /         \\    /                 \n";
std::cout << "           /           \\                     \n";
std::cout << "          /             \\                    \n";
std::cout << "         /               \\                   \n";

} else if (misses == 5) {

std::cout << "                 .                            \n";
std::cout << "                 |                            \n";
std::cout << "              .-\"^\"-.                       \n";
std::cout << "             /_....._\\                       \n";
std::cout << "         .-\"`         `\"-.                  \n";
std::cout << "        (  ooo  ooo  ooo  )                   \n";
std::cout << "         '-.,_________,.-'    ,-----------.   \n";
std::cout << "              / / \\ \\        (  Send help! )\n";
std::cout << "             /       \\      / `-----------'  \n";
std::cout << "            /         \\    /                 \n";
std::cout << "           /           \\                     \n";
std::cout << "          /             \\                    \n";
std::cout << "         /               \\                   \n";

} else if (misses == 6) {

std::cout << "                 .                            \n";
std::cout << "                 |                            \n";
std::cout << "              .-\"^\"-.                       \n";
std::cout << "             /_....._\\                       \n";
std::cout << "         .-\"`         `\"-.                  \n";
std::cout << "        (  ooo  ooo  ooo  )                   \n";
std::cout << "         '-.,_________,.-'    ,-----------.   \n";
std::cout << "              /     \\        (  Send help! ) \n";
std::cout << "             /       \\      / `-----------'  \n";
std::cout << "            /         \\    /                 \n";
std::cout << "           /           \\                     \n";
std::cout << "          /             \\                    \n";
std::cout << "         /               \\                   \n";

}
}

我没有编写太长时间,所以总是欢迎提示

c++ random
1个回答
2
投票

这是一个时间问题。标头中的随机数表达式在main函数中的随机数生成器播种代码之前执行。像这样更改你的代码

// header
int rand_number;
std::string codeword;

// source
int main() {
    srand (time(NULL));
    rand_number = rand() % codewords.size();
    codeword = codewords[rand_number];

现在,在随机数生成器播种后生成随机数。

PS为什么take_turndisplay在你的头文件中起作用?函数(除非它们是内联的)应放在源文件中。

© www.soinside.com 2019 - 2024. All rights reserved.