我正在编写一个猜谜游戏,用户将定义第一个数组以从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
答案 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”不会打印。