如果他们输入一维数组的数字已经输入,如何提醒用户?
Posted
技术标签:
【中文标题】如果他们输入一维数组的数字已经输入,如何提醒用户?【英文标题】:How to alert a user if the number they entered into a 1 dimensional array has already been entered? 【发布时间】:2019-05-07 21:43:20 【问题描述】:好的,所以我正在尝试编写一个程序,它将接受来自用户的 5 个不同的数字,并将输入到一个 6 元素的一维数组中,然后进行测试以确保它在 1 和 69 之间并且数字 (刚刚输入的)不在数组中。
我已经测试了范围问题,但我不知道如何测试重复数组问题,因为无论数字是什么或根本没有,测试器都会执行。
另外,如果有人想知道任何类型的“pball”变量与强力球彩票相关,这只是强力球模拟器中的几个函数之一。由于教授的要求,我无法使用库函数(如排序)。
#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];
当我执行当前代码时,无论如何都会显示重复测试。只有当您尝试输入的数字已放入数组中时,它才会显示。 提前致谢!
【问题讨论】:
查看std::unordered_set
。
你应该和this linked question的提问者一起。两个头总比一个好。
【参考方案1】:
for (int qt = 0; qt < PBALLAMOUNT; qt++)
while (pBallNums[qt] == pBallNums[qt + 1])
// stuff not changing qt
您在 for
循环中有一个无限的 while
循环。外部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);
【讨论】:
以上是关于如果他们输入一维数组的数字已经输入,如何提醒用户?的主要内容,如果未能解决你的问题,请参考以下文章
输入一个已经按升序排序的数组和一个数字 ,在数组中查找两个数,使得他们的和是输入的那个数字