好,所以我正在尝试编写一个程序,该程序将接受来自用户的5个不同的数字,并将其输入到6个元素的一维数组中,然后进行测试以确保其值在1到69之间,并且该数字(刚刚输入的)尚未在数组中。
我已经测试了范围问题,但是我无法弄清楚如何测试重复数组问题,因为无论数字是多少,还是根本没有数字,测试器都会执行。 同样,以防万一有人想知道任何类型的“ pball”变量与强力球彩票有关,这只是强力球模拟器中几个功能之一。由于教授的要求,我无法使用库函数(例如sort)。
#include <iostream>
using namespace std;
const int PBALLAMOUNT = 6;
const int PBMAX = 69;
const int PBMIN = 1;
int pBallNums[PBALLAMOUNT];
void pBallInput(int pBallNums[PBALLAMOUNT]) {
cout << "Enter the numbers you want to use." << endl;
for (int k = 0; k < PBALLAMOUNT - 1; k++) {
cin >> pBallNums[k];
while (pBallNums[k] < PBMIN || pBallNums[k]>PBMAX) {
cout << "Invalid input! Please enter different numbers between 1 and 69" << endl;
cin >> pBallNums[k];
}
for (int qt = 0; qt < PBALLAMOUNT; qt++)
while (pBallNums[qt] == pBallNums[qt + 1]) {
cout << " you need 5 unique numbers. Please enter a new number ";
cin >> pBallNums[qt];
}
}
}
当我执行当前代码时,无论是否显示重复测试。仅当您尝试输入的数字已放入数组中时,它才显示。 预先感谢!
答案 0 :(得分:1)
for (int qt = 0; qt < PBALLAMOUNT; qt++)
while (pBallNums[qt] == pBallNums[qt + 1]) {
// stuff not changing qt
}
在while
循环中,您有一个无限的for
循环。 for
外部循环不是迭代的,只是内部while
循环。
(如果输入顺序无关紧要,请使用std::set
或更好的std::unordered_set
)
除此之外,我认为您应该尝试更好地组织代码。将小型功能用于小型任务!
while (/* not all numbers set */)
{
// input number here
if (/* input failed */)
{
// handle IO failure; best to exit probably
}
else if (/* input not in correct range */)
{
// print error, retry
}
else if (/* input number already present in array */)
{
// print error, retry
}
else
{
// save input to current array index
// advance current array index if you need more numbers
}
}
// Implement this for the check above
// size == numbers read so far
bool input_already_present(int * array, size_t size, int number);