我正在尝试构建一个应该与数组进行比较的函数,其中一个函数是自己生成的(彩票数字),第二个数组是由用户输入提交并存储的。
这应该用于计算彩票和用户输入提交的数字之间的匹配数字。如果它们匹配,则应显示一条消息,告诉用户他已经赢得了大奖等。
这应该是比较两个数组的函数;我假设是正确的(更清楚地说:该程序是比较两个数组中的相应元素,并保留匹配的数字的计数)?
int compare(int user[], int lottery[]){
int matches = 0;
for (int i = 0; i < SIZE; i++) {
if (user[i] == lottery[i]) {
matches++;
}
}
return matches;
}
问题出在返回主功能时,该功能应该告诉用户是否赢了。这是我在主函数中创建的一小段代码:
int matches = compare(user, lottery);
if (matches) {
cout << "Congratulations, you have won the big prize" << endl;
}
else {
cout << "Please, try again" << endl;
}
如果用户中奖,应该显示一条消息并计算与彩票号码匹配的用户位数。
实际输出是用户输入的数字。希望我能解释一下自己。
如果您需要帮助并且需要更多信息,这里是完整的代码。 http://cpp.sh/8ivyc
答案 0 :(得分:2)
在您的情况下,只有一次相同索引处的相同值可以匹配,但所有值必须相等
对代码进行最少更改的第一种可能性:
int compare(int user[], int lottery[]){
int matches = 0;
for (int i = 0; i < SIZE; i++) {
if (user[i] == lottery[i]) {
matches++;
}
}
return (matches == SIZE); /* <<< modified */
}
但是在发现另一个值之后继续比较是没有用的,所以可以这样:
int compare(int user[], int lottery[]){
for (int i = 0; i < SIZE; i++) {
if (user[i] != lottery[i]) {
return 0;
}
}
return 1;
}
并且因为您使用的是C ++:
bool compare(int user[], int lottery[]){
for (int i = 0; i < SIZE; i++) {
if (user[i] != lottery[i]) {
return false;
}
}
return true;
}
(当然,也可以更改为使用 bool 而不是 int 的调用)
答案 1 :(得分:0)
最简单的方法是只使用std::array
。如果您使用std::array
,则可以使用==
进行比较!
函数populate
和show_values
可以这样写:
void populate(std::array<int, SIZE>& nums) {
srand(time(0));
for (int& value : nums) {
value = rand() % 9;
}
}
void showValues(std::array<int, SIZE>& nums) {
for (int i = 0; i < SIZE; i++) {
cout << setw(3) << nums[i];
}
cout << endl;
}
compare
特别简单:
bool compare(std::array<int, Size>& nums1, std::array<int, Size>& nums2) {
return nums1 == nums2;
}
答案 2 :(得分:0)
检查不平等而不是平等。 一旦用户元素不等于彩票元素
,您将立即退出功能int compare(int user[], int lottery[]){
for (size_t i = 0; i < SIZE; i++) {
if (user[i] != lottery[i]) {
return 0;
}
}
return 1;
}