如果已经输入了输入1维数组中的数字,如何提醒用户?

时间:2019-05-07 21:43:20

标签: c++ arrays

好,所以我正在尝试编写一个程序,该程序将接受来自用户的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];
                }
        }
}

当我执行当前代码时,无论是否显示重复测试。仅当您尝试输入的数字已放入数组中时,它才显示。 预先感谢!

1 个答案:

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