无法设置范围用户可以输入的数字

时间:2016-10-11 18:20:09

标签: c++ arrays loops

我正在编写一个程序,除了下面的功能外,一切正常。我很好奇是什么能最好地做到这一点,以便第一个循环的用户输入只能是1 - 69,第二个循环从1 - 26。

我打算做一个do / while循环但是出现了如下所述的错误。

//***********************************************
//Case 4 lets you input your own lottery numbers*
//***********************************************
void case4()
{
    cout << numberprint << endl;
    tickettop();
    int array_pick[4];
    int pballp;
    for (int i = 0; i < 5; i++)
    {
        cout << evalue << i + 1 << space1;
        do 
       {
        cin >> array_pick[i];
        } while (array_pick > 0 && array_pick <= 69); //Here is where I get an error for array_pick <= 69 (operand types are incompatible ( int * and int))
    }
    for (int i = 0; i < 1; i++)
    {
        cout << eball;
        cin >> pballp;
    }
    cout << endl << endl;
    ofs << endl;
    ticketbottom();
    ofs << bar << box << bar << endl;
}

2 个答案:

答案 0 :(得分:1)

int lottonumber;

ask: //goto label
cin >> lottonumber; //prompt value in console
//if lower than 1 or higher than 69, goto label
if (lottonumber < 1 || lottonumber > 69)goto ask; 

人们不喜欢goto标签,但在这种情况下它不是问题。 while循环和for循环可以使代码更易于理解和组织。 goto标签不会使你的程序变慢或“坏”,它只会使组织变得更难。或者在这种情况下,更容易。

答案 1 :(得分:1)

您的代码存在许多问题。这一行有两个问题:

} while (array_pick > 0 && array_pick <= 69);

首先,您将数组与整数进行比较,这是编译器错误的来源。其次,条件应该与现在的情况相反:您希望循环继续直到用户输入正确的值,因此如果输入的值超出范围,则需要条件为真,而不是在实际上正确的情况下。

你可能想做的是:

} while (array_pick[i] < 0 || array_pick[i] > 69);

要检查第二个输入,您可以使用相同的do...while构造,只需更改条件:

cout << eball;
do 
{
    cin >> pballp;
} while (pballp < 0 || pballp > 26);

但是你的代码还有其他问题,尽管其余部分是语法正确的,据我所知。

第一个循环将超出array_pick数组的范围。

for (int i = 0; i < 5; i++)

i将取值0,1,2,3 和4 ,但您在此循环中修改的数组定义为int array_pick[4],因此会只是索引为0,1,2和3的元素。

第二个for毫无意义,因为循环只会进行一次迭代。