如何遍历2个数组并确定每个数组中的值是否相同?

时间:2019-03-05 04:29:47

标签: c++

我正在编写一个猜谜游戏,用户将定义第一个数组以从1缩放到输入的任何数字。我有一个函数,将数字随机化,然后第二个数组将是用户输入的猜测。我正在尝试创建一个for循环,该循环将遍历两个数组,如果数组值匹配,则显示“ O”,否则返回“ X”。看起来循环的第一个迭代工作并打印“ O”,但之后又打印很多X。

#include <iostream>
using namespace std;


void createArray() {
    int n;
    int counter = 0;
    cout << "Enter total number: ";
    cin >> n;

    // for loop to generate array to scale from 1 - 
       user input.
    int *arr1 = new int[n];
    for (int i = 1; i < n + 1; i++){
        arr1[i] = i;
        // Counter is used to track the size of array
        counter++;
    }
    // for loop used to print the values of array (just for development and my reference)
    for (int i = 1; i < n + 1; i++){
        cout <<"[" << arr1[i] << "]";
    }
    cout << endl;
    cout << counter << endl << "Number Guessing" << endl;
    cout << "Enter " << counter << " digits (1-" << counter << ")" << endl;

    // initialize user input array to be the same size as first array
    int arr2[counter];
    for (int i =0; i < counter; i++){
        cin >> arr2[i];
    }
    cout << endl;

    // here I am trying to cycle through both arrays and print "O" if the values match in each array.
    for (int i = 0; i < n; i++){
        arr1[i] = i;
        bool correct = true;
        for (int j = 0; j < n; j++){
            arr2[j] = j;
            if (arr1[i] != arr2[j]){
                correct = false;
                cout << "X";
            }
            if (correct){
                cout << "O";
            }
        }
    }
    cout << endl;
}
int main(){
    createArray();
}

这是输出:

  

输入总数:6

     

[1] [2] [3] [4] [5] [6]

     

猜数字输入6位数字(1-6)

     

1 2 3 4 5 6

     

OXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

2 个答案:

答案 0 :(得分:0)

您不需要两个循环

for (int i = 0; i <= n; ++i) {
  if (arr1[i] == arr2[i]) {
      std::cout << "0";
  }
  else {
      std::cout << "X";
  }
}

您应该输入期望的输出值,以便我们知道您想要什么

答案 1 :(得分:0)

您的循环没有并排比较数组,而是将数组1中的每个元素与数组2中的每个元素进行比较。

由于两个数组都通过arr [i] = i&arr2 [j] = j重置,因此它们都是{0,1,2,3,4,5}。

第一个内环将得到一个'O'if(0==0),其中i = 0和j = 0,接下来的5个内环if(0==1..5),其中i = 0和j = 1..5是一个' X'。

问题出在下一个外部循环上。通过i = 1的外循环第二遍将正确重置为true,但是立即进行内循环测试if(1==0),其中i = 1和j = 0,它为false,因此设置了正确为假。

因此,在第二遍通过内循环if(1==1)为真,其中i = 1&j = 1,但是,内循环中没有要设置为** Correct back to的语句。是的。

此外,作为相等性测试的结果,在打印 X 的情况下,仅当 Correct 仍然为true时才输出 O ,事实并非如此。实际上,对于第一个循环之后的每个外循环,都会有一个内循环相等性测试,该测试将 Correct 设置为false,然后再进行随后的真实相等性测试。

结果为一个“ O”,后跟一个30“ X”。每个错误的一个“ X”; 6个外循环,并且foreach,六个内循环中的5个将为假。五个“ O”根本不会打印,因为相等性测试的结果是“ O”不会打印。

相关问题