我正在编写一个程序,除了下面的功能外,一切正常。我很好奇是什么能最好地做到这一点,以便第一个循环的用户输入只能是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;
}
答案 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
毫无意义,因为循环只会进行一次迭代。