Я работаю над простой программой "дополнительных вопросов" для моего введения в класс C ++. Мой инструктор использует тестовый драйвер для оценки нашего кода. Драйвер тестирования сначала запускает программу, используя свой код, а затем запускает мою функцию и сравнивает их.
В этом коде мы должны генерировать случайные числа, чтобы дать пользователю простые задачи сложения. Они вводят ответ, и программа отслеживает, сколько они получили правильных ответов, и возвращает количество правильных ответов в основную функцию.
Насколько я понимаю, srand () сгенерирует тот же список чисел, если семя такое же. Проблема, с которой я столкнулся, заключается в том, что даже несмотря на то, что я помещаю srand (seed) в начало моей функции, последовательные числа, генерируемые каждым вызовом rand (), по-прежнему разные. Насколько я понял, если вы вспомните srand с тем же семенем, он сбросит генератор чисел и даст вам ту же цепочку чисел из rand ().
Поскольку он использует тестовый драйвер для оценки, драйвер говорит мне, что почти все мои результаты неверны, но это потому, что драйвер на самом деле не вычисляет мои случайные сгенерированные числа, он просто ищет те же ответы, что и в его версии. программы. Итак, проблема в том, что по какой-то причине при вызове srand (seed) используются разные числа.
Это может быть проблема с его драйвером, если он отправляет в мою функцию для семени другой номер, чем он использовал, но также может быть, что я поместил srand () не в то место или я использую его неправильно.
Может ли кто-нибудь подтвердить, что использование srand (seed) в моем коде будет сброшено и использовать те же числа, если это начальное значение такое же?
Вот моя функция:
int correct = 0; // initialize global variable to return correct answers
// define the additionQuestions function.
int additionQuestions(int largest, int problemCount, int seed)
{
srand(seed); // initialize the random generator to the same seed used in test driver
int gen1, gen2, answer;
bool quitting = false;
// generate problems
for (int count = 0; count < problemCount && (!(quitting)); count++)
{
gen1 = rand() % largest;
gen2 = rand() % largest;
cout << "How much is " << gen1 << " plus " << gen2 << "? ";
cin >> answer;
if (answer == -1) // check for sentinel of -1
{
cout << endl << " You entered -1; exiting...";
quitting = true;
}
else // check if the user's answer is correct.
{
cout << endl << " You said " << gen1 << "+ " << gen2 << " = " << answer << ".";
if (answer == gen1 + gen2)
{
cout << " Very good!" << endl;
correct += 1;
}
else
{
cout << " No. Sorry, the correct answer is " << gen1 + gen2 << "." << endl;
}
}
} // end of for loop.
return correct; // return the number of correct answers to the main function
}