我正在尝试编写一个模拟器来玩强力球彩票,该程序会要求输入5
个数字(又称白球)并输入到{{1} }元素数组和另一个数字(红色的Powerball)插入第6
个元素。
我需要弄清楚如何测试前6
个元素中的重复项,但是第5
个不必是唯一的。
我有一个我认为可以工作的循环,但是它甚至没有执行,而且非常混乱。
是否有更有效的方法来测试重复项,可能涉及布尔标志?
6
如果用户已经在数组中输入了一个数字并提供了另一个const int PBALLAMOUNT = 6;
const int PBMAX = 69;
const int PBMIN = 1;
const int REDMAX = 26;
cout << "Enter the numbers you want to use for the white powerballs" << 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];
}
}
bool dup = false;
for (int i = 0; i < PBALLAMOUNT - 1; i++)
{
for (int j = i + 1; j < PBALLAMOUNT - 1; j++)
{
while (!dup)
{
if (pBallNums[i] == pBallNums[j])
{
cout << "Please enter a unique number from the others in your PowerBall number selection" << endl;
cin >> pBallNums[i];
}
}
}
}
cout << "And what would you like for your redball" << endl;
cin >> pBallNums[5];
while (pBallNums[5] < PBMIN || pBallNums[5] > REDMAX)
{
cout << " The red powerball needs to be between 1 and 26: ";
cin >> pBallNums[5];
}
语句,我基本上只需要它来提醒用户,但是输入数字后实际上什么也没发生。
答案 0 :(得分:3)
“我基本上只需要它来警告用户是否已经输入 数组中输入一个数字,并提供另一个
cin >> pBallNums
语句。”
在这种情况下,只需使用 7 days 并使用 std::set
方法将用户输入存储到集合中。
来自 std::set::emplace
,
template< class... Args >
std::pair<iterator,bool> emplace( Args&&... args );
std::set::emplace
将由迭代器组成的一对返回到插入的元素,如果没有插入,则返回已经存在的元素 发生,并且出现布尔值表示插入是否发生。真正 表示插入,假表示不插入。
只需针对您的情况获取此信息,然后再次循环以供下一次用户输入。
这是示例代码(cppreference.com):
#include <iostream>
#include <set>
int main()
{
std::set<int> mySet;
for(int loopCount{ 0 }; loopCount != 5; )// repeat until maximum loop count
{
int input; std::cin >> input; // user input
// get the std::pair<iterator,bool>
const auto pairIter = mySet.emplace(input);
// increment maximum loop count, if insertion successful
if (pairIter.second) ++loopCount;
}
for (const int userInput : mySet)
std::cout << userInput << " ";
return 0;
}
示例输入:
1
1
2
3
4
2
4
3
5
输出:
1 2 3 4 5
答案 1 :(得分:1)
排序,然后检查相邻项目是否相等。
答案 2 :(得分:1)
首先,尽量不要将实际需求与实施细节混为一谈。
[...]程序将要求输入5个数字(又名白球)的地方 并输入一个6元素数组和另一个数字(红色 强力球)进入第六个元素。
您真正想要的是:从用户输入中提取5个不同的数字。从您的代码中,我读到检查应该在每次输入之后进行。我想读最后一个数字是可以的,所以让它放在一边吧。
接下来,习惯使用containers in the standard library。它们的数量并不多,但是您可以做的事无数。要在容器中包含不同的元素,您需要std::unsorted_set
或std::set
。
然后,基本上您只需要使用insert
:
#include <set>
#include <iostream>
int main()
{
std::set<int> numbers;
auto x = numbers.insert(1);
std::cout << "1 was not present before? : " << x.second << "\n";
x = numbers.insert(1);
std::cout << "1 was not present before? : " << x.second << "\n";
}
打印:
1 was not present before? : 1
1 was not present before? : 0