Предположим, что у вас есть полностью определенная и правильная функция со следующим прототипом
int randomBetween( int lowerBound, int upperBound );
который возвращает случайное число между нижней и верхней границами включительно.
Напишите основную функцию, которая использует randomBetween для генерации 1000 значений от 1 до 10 включительно. Когда значения генерируются, подсчитайте, сколько раз значение равно пяти. Покажите, сколько раз значение было равно пяти. Ваша программа должна выводить только одно число (т.е. Не ставить инструкцию cout в цикл).
Вот что я имею до сих пор:
// Function Prototypes
int randomBetween( int lowerBound, int upperBound );
int main( )
{
int lowerbound, upperbound;
cout << "Enter the value for the lower bound: " ;
cin >> lowerbound;
cout << "Enter the value for the upper bound ( lower < upper ) : " ;
cin >> upperbound;
cout << "The random value between " << lowerbound << " and "<< upperbound
<< " is " << randomBetween << endl;
return EXIT_SUCCESS;
}
int randomBetween( int lowerBound, int upperBound )
{
int upperbound, lowerbound;
int randomBetween = rand() % (upperbound-lowerbound) + upperbound;
return randomBetween;
}
Когда я скомпилирую программу и вводим значения для нижней и верхней границ, я получаю ответ: 00E9131B
Хорошо, во-первых, ваш код C++ содержит несколько ошибок. Похоже, что вы возвращаете адрес функции. Даже если функция в C++ не принимает никаких параметров, при вызове вы всегда должны следовать имени функции с помощью скобки: function()
. В вашем случае он принимает параметры, которые необходимо правильно передать ему function(param0, param1, param2)
.
Похоже, вы предполагаете, потому что вы назвали ваши переменные lowerbound
и upperbound
те же, что и параметры функции, которые будут неявно переданы, но это не так, как работает C++.
Однако вы можете определить lowerbound
и upperbound
как глобальные переменные и не иметь функцию randomBetween()
принимать любые параметры. Вы можете установить глобальные переменные, определив затем вне сферы действия функции.
Вам также необходимо инициализировать все переменные. Просто установите lowerbound
и upperbound
на 0
когда вы их определяете.
замените эту строку
cout << "The random value between " << lowerbound << " and "<< upperbound
<< " is " << randomBetween << endl;
с этим
cout << "The random value between " << lowerbound << " and "<< upperbound
<< " is " << randomBetween(lowerbound, upperbound) << endl;
то, что вы делали, распечатывает адрес функции. вам нужно вызвать функцию с аргументами.
также измените это
int randomBetween( int lowerBound, int upperBound )
{
int upperbound, lowerbound;
int randomBetween = rand() % (upperbound-lowerbound) + upperbound;
return randomBetween;
}
в
int randomBetween( int lowerBound, int upperBound )
{
int randomBetween = rand() % (upperbound-lowerbound) + upperbound;
return randomBetween;
}
вам не нужны параметры повторного использования снова в функции
это:
cout << "The random value between " << lowerbound << " and "<< upperbound
<< " is " << randomBetween << endl
Должно быть:
cout << "The random value between " << lowerbound << " and "<< upperbound
<< " is " << randomBetween(lowerbound,uppderbound) << endl
В функции randomBetween вам не нужно объявлять переменные upperbound и lowerbound, поскольку они уже переданы функции.
Также было бы плохой практикой назвать переменную с тем же именем, что и функция, поэтому вам, вероятно, следует переименовать переменную randomBetween в функции randomBetween.
Вы можете взглянуть на ссылку для функции rand(), так как ваша функция randomBetween не возвращает значение в нужном диапазоне:
http://en.cppreference.com/w/cpp/numeric/random/rand
Я не уверен, что вы исключили это из того, что вы опубликовали, но не забыли включить библиотеки cstdlib и iostream:
#include<iostream>
#include<cstdlib>
using namespace std;
Ваша функция не использует аргументы,
int randomBetween( int lowerBound, int upperBound )
{
int randomBetween = rand() % (upperBound-lowerBound) + upperBound;
return randomBetween;
}
И вызовите функцию с аргументами,
... << randomBetween(lowerbound, upperbound) <<endl;