在数组中出错,比较特定输入中的程序

Getting error in an array comparing program in a specific input

提问人:Parsa Showkati 提问时间:4/12/2019 更新时间:4/12/2019 访问量:33

问:

我编写了一个小程序,将两个数组与自定义数组大小进行比较。每当我将数组大小设置为 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";
    }
}
C++ 数组 比较 IOSTREAM

评论

1赞 Davide Spataro 4/12/2019
这可能不是错误的来源,但请注意,C++不支持可变大小数组。 仅当在编译时已知时才可以。int arr[x];x
0赞 Parsa Showkati 4/12/2019
是的。我在第 7 行得到 x,它位于 int arr [x] 之前;
0赞 Davide Spataro 4/12/2019
在编译时绝对不知道。你从用户那里得到使用!xcin

答:

1赞 lubgr 4/12/2019 #1

您具有越界访问权限,这会生成未定义的行为。回想一下,原始数组的索引从开始,而不是从一开始。因此

int i = 0;

是索引的正确初始化,而第一个循环必须更改为

while (i < x) { /* ... */ }

然后,需要再次调整分配i

i = 0;

剩下的两个循环

while (i < x) { /* ... */ }

for (int a = 0; a < x; a++) { /* ... */ }

作为旁注,您使用的是可变长度数组 ( 和 ),这是非标准的 C++(有关更多信息,请参阅此线程)。首选具有与运行时相关的大小的简单容器。arrarr2std::vector

0赞 Sanket Kumar Mali 4/12/2019 #2
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";
}

它会起作用的。