在特定输入的数组比较程序中出错
Getting error in an array comparing program in a specific input
我写了一个小程序来比较两个具有自定义数组大小的数组。每当我将数组大小设置为 4 时,程序在比较每个数组的第四个成员时都无法正常工作。
(当我将 x 设置为 4 时,第四个数组成员没有得到正确比较)
这是代码:
#include <iostream>
using namespace std;
int main()
{
int x;
std::cin >> x;
int i =1;
int arr[x];
int arr2[x];
while(i <= x)
{
std::cout << "Enter row " << i << " of arr\n";
std::cin >> arr[i];
i++;
}
i = 1;
while(i <= x)
{
std::cout << "Enter row " << i << " of arr2\n";
std::cin >> arr2[i];
i++;
}
for(int a = 0;a <= x;a++)
{
if(arr[a] == arr2[a])
std::cout << "row " << a << " is true\n";
}
}
您有越界访问,这会产生未定义的行为。回想一下,原始数组的索引以 zero 开头,而不是 one。因此,
int i = 0;
是索引的正确初始化,而第一个循环必须改为
while (i < x) { /* ... */ }
那么,i
的赋值需要再次调整为
i = 0;
和剩下的两个循环到
while (i < x) { /* ... */ }
for (int a = 0; a < x; a++) { /* ... */ }
附带说明一下,您使用的是可变长度数组(arr
和 arr2
),这是非标准 C++(有关详细信息,请参阅 this thread)。更喜欢 std::vector
大小与运行时相关的简单容器。
i = 1;
while(i <= x)
{
std::cout << "Enter row " << i << " of arr2\n";
std::cin >> arr2[i];
i++;
}
您正在将元素存储在以 1 索引开头的数组中
for(int a = 0;a <= x;a++)
{
if(arr[a] == arr2[a])
std::cout << "row " << a << " is true\n";
}
但是从0索引开始比较。
保持一致性从 0 或 1
开始
for(int a = 1;a <= x;a++)
{
if(arr[a] == arr2[a])
std::cout << "row " << a << " is true\n";
}
它会起作用..
我写了一个小程序来比较两个具有自定义数组大小的数组。每当我将数组大小设置为 4 时,程序在比较每个数组的第四个成员时都无法正常工作。 (当我将 x 设置为 4 时,第四个数组成员没有得到正确比较)
这是代码:
#include <iostream>
using namespace std;
int main()
{
int x;
std::cin >> x;
int i =1;
int arr[x];
int arr2[x];
while(i <= x)
{
std::cout << "Enter row " << i << " of arr\n";
std::cin >> arr[i];
i++;
}
i = 1;
while(i <= x)
{
std::cout << "Enter row " << i << " of arr2\n";
std::cin >> arr2[i];
i++;
}
for(int a = 0;a <= x;a++)
{
if(arr[a] == arr2[a])
std::cout << "row " << a << " is true\n";
}
}
您有越界访问,这会产生未定义的行为。回想一下,原始数组的索引以 zero 开头,而不是 one。因此,
int i = 0;
是索引的正确初始化,而第一个循环必须改为
while (i < x) { /* ... */ }
那么,i
的赋值需要再次调整为
i = 0;
和剩下的两个循环到
while (i < x) { /* ... */ }
for (int a = 0; a < x; a++) { /* ... */ }
附带说明一下,您使用的是可变长度数组(arr
和 arr2
),这是非标准 C++(有关详细信息,请参阅 this thread)。更喜欢 std::vector
大小与运行时相关的简单容器。
i = 1;
while(i <= x)
{
std::cout << "Enter row " << i << " of arr2\n";
std::cin >> arr2[i];
i++;
}
您正在将元素存储在以 1 索引开头的数组中
for(int a = 0;a <= x;a++)
{
if(arr[a] == arr2[a])
std::cout << "row " << a << " is true\n";
}
但是从0索引开始比较。 保持一致性从 0 或 1
开始for(int a = 1;a <= x;a++)
{
if(arr[a] == arr2[a])
std::cout << "row " << a << " is true\n";
}
它会起作用..