Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我不能把2维数组中的两个元素的差异分配给C++中的其他数组元素吗?_C++_Arrays - Fatal编程技术网

我不能把2维数组中的两个元素的差异分配给C++中的其他数组元素吗?

我不能把2维数组中的两个元素的差异分配给C++中的其他数组元素吗?,c++,arrays,C++,Arrays,下面是代码,这是打破我的头两天以来 #include <iostream> using namespace std; int main() { int N; int A[1][N-1]; int B[1][N-1]; std::cout << "ENTER NO OF ROUND" << '\n'; std::cin >> N; for (int j=0; j<N; j++) {

下面是代码,这是打破我的头两天以来

#include <iostream>
using namespace std;
int main()
{
    int N;
    int A[1][N-1];
    int B[1][N-1];

    std::cout << "ENTER NO OF ROUND" << '\n';
    std::cin >> N;
    for (int j=0; j<N; j++)
    {
            int i =0;
            std::cout << "enter the scores" << '\n';
            std::cin >> A[i][j]>>A[i+1][j];

            if (A[i][j] > A[i+1][j])
            {
                    B[i][j] = A[i][j] - A[i+1][j];
                    B[i+1][j] = 1;

            }
            if (A[i][j] < A[i+1][j])
            {
                    B[i][j] = A[i+1][j] - A[i][j];
                    B[i+1][j] = 2;
            }

    }
    std::cout << A[0][0]<<A[1][0] << '\n';
    return 0;
}
这里在第18行第19行和第23行第24i行中,我应该得到数组A[1][N-1]的两个元素的差,然后分配给数组B[1][N-1]中的一个元素,但我无法得到正确的结果,而是得到一个随机数。
请帮助我完成此操作

您使用未初始化的数据,因此任何事情都可能发生

声明N变量:

int N;
然后,在下一行中,在不指定任何值的情况下,使用它创建两个数组,使用N作为大小:

int A[1][N-1];
int B[1][N-1];
这已经是灾难的起点。此外,声明大小为[N-1]的数组在技术上是不正确的-N是一个变量,因此不能用这种方式声明数组。这是一个编译器扩展。您在使用Visual Studio吗?。如果N的值已知,则声明为:

static constexpr size_t N = value;
如果在运行时读取,请使用新的或更好的方法创建数组,以使代码健壮且不易出错

第二件事是,数组被声明为int A[1][N-1];,但你要做到以下几点:

int i = 0;
....
if (A[i][j] > A[i+1][j])

导致读取A[1 ] [j],它不存在——在C++中,我们从0开始索引!还可以修改这些不存在的图元:

std::cin >> A[i][j] >> A[i+1][j];
这很可能会导致写入属于B数组的内存

小注:

在编写std::everywhere时,使用名称空间std似乎是多余的 如果M=1,二维数组[M][N]的点是什么? 如果需要在运行时确定大小的数组,请使用。C++中不支持使用的C。< /P>
std::cout << "ENTER NO OF ROUND" << '\n';
int N = 0;
std::cin >> N;
std::vector<std::vector<int>> A(2, std::vector<int>(N));
std::vector<std::vector<int>> B(2, std::vector<int>(N));

请注意,您需要2 x N数组,因为您同时读取[i][j]和[i+1][j],并且for循环从[0到N-1]-N次。

int N;-好的,你声明了一个N,但是在下一行中使用它的值是多少?[N-1]是一个邪恶的扩展,因为它不是编译器的时间常数。不要那样做。根据您的计划使用constexpr int N或std::vector您需要选择一个。未初始化且未编译的时间常数N不是唯一的问题,当您执行a[anything_but_0]时,您访问的是越界,与B相同……第6行和第7行中的N变量的值是多少?我还要补充UKMonkey的最后一个注释,您甚至不使用该using指令,所以拥有它有什么意义?顺便说一句,如果你用clang或gcc编译,至少打开-Wall,其中包括-Winitialized,这会给你一个关于unitialized N的警告,在其他编译器上应该有类似的选项,我正在使用ATOM editor,在声明int N之后,我为N添加了cin,之后我声明了两个数组a[1][N-1]和B[1] [N-1],这对我有用,谢谢@MateuszGrzejek@Samdare考虑接受一个最能回答你问题的答案。谢谢@ A的工作,你需要在最后一个循环中打印你的BS,而不仅仅是一个[0 ] [ 0 ]。