如果他们输入一维数组的数字已经输入,如何提醒用户?

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);

【讨论】:

以上是关于如果他们输入一维数组的数字已经输入,如何提醒用户?的主要内容,如果未能解决你的问题,请参考以下文章

输入一个已经按升序排序的数组和一个数字 ,在数组中查找两个数,使得他们的和是输入的那个数字

检查一个数字在数组中出现的次数

将 5 个元素输入数组,检查验证然后输出 C++

不允许用户输入数字1作为UITextField中的第一个数字

C语言中怎么把一维数组初始化都为0,

Java - 从类中调用私有数组列表[重复]