void getLottoPicks()
{
int i,k, num[7], num1;
bool nodup(int num[7],int k, int num1), noover= true;
for(i=0; i<7; i++)
num[i]=51;
cout << "please enter the seven numbers you think will win the lottery: "<< endl;
for (i=0; i<7;i++)
{
cin >> num[i];
if(num[i] < 1 || num[i] > 40)
{
i= i-1;
noover = false;
cout << "The number is out of range. Please enter a new number ";
}
if(noover)
{
num1=num[i];
k=i;
if (!nodup(num,k, num1))
{
i=i-1 ;
cout <<" you type the duplicated number. please enter another number";
}
}
}
}
bool nodup(int num[7],int i, int num1)
{
bool dup = false;
int k;
for(k=0; k<i-1; k++)
{
if (num[k] = num1)
dup = true;
}
return !dup;
}
每当我输入相同数字的2时,它总是会“你输入重复的数字。请输入另一个数字”;
答案 0 :(得分:6)
bool nodup(int num[7],int k, int num1), noover= true;
我可以诚实地说,我认为我之前没有曾经看过这样的前瞻声明(并不是说这篇文章对你有所帮助;)
答案 1 :(得分:4)
我认为这一行是错误的:
if (num[k] = num1)
我认为它应该是:
if (num[k] == num1)
答案 2 :(得分:3)
您正在从不同位置开始填充阵列。在getLottoPicks()中,您从1开始,在nodup()中从0开始。在C ++中,您通常从0开始数组。
答案 3 :(得分:1)
还有另一个问题:getLottoPicks()中的for循环从1开始,而nodup()的for循环从0开始。
答案 4 :(得分:1)
您的代码在技术和美学方面存在相当多的问题。
for (i=1; i<7;i++)
错误。这只会运行6次。您应该尝试使用i=0
。bool nodup(int num[7],int k, int num1), noover= true;
那样执行前向声明,而是在方法getlottopicks
之前移动前向声明,或者在乐透选择之前移动整个方法nodup
。这在某种程度上看起来并不容易。if (num[k] = num1)
错了。将其替换为if (num[k] == num1)
i--
代替i=i-1
并使用continue
而不是使用变量noover
。修复这些问题,您的代码会更好。
答案 5 :(得分:1)
问题显然在于if (num[k] = num1)
,应该写成if (num[k]== num1)
。也就是说,将赋值运算符更改为相等运算符。
同样for
循环的条件应为:
for(k=0; k <= i ; k++) //in nodup function
//^^^^^^ I think you want this!
在getLottoPicks
中,循环应该是这样的:
for (i = 0 ; i<7;i++)
//^^^^ start from zero
顺便说一句,如果我正确地理解了你的代码(以及它所做的工作),那么我认为你应该使用std::set
来自动解决许多问题。首先,std::set
总是在将新项目添加到自身之前检查重复项。这意味着,std::set
中的每个项目都是唯一的。
考虑使用:std::set<int>
如果您使用std::set<int>
,您的代码将减少到:
#include <set>
void getLottoPicks()
{
set::set<int> nums;
int input;
while(nums.size() < 7)
{
std::cin >> input;
if(input < 1 || num > 40 )
{
std::cout << "Out of range. Please enter number between [1-40] : ";
}
else if(nums.insert(input).second == false)
{
std::cout <<"Duplicate number. Please try again : ";
}
}
}
您不再需要nodup()
功能了。