程序在遍历所有值之前离开循环

adi*_*ain -4 c++

数组的i和j值不正确

我已经尝试检查i和j可能改变但没有看到任何地方的任何地方。

for (int i = 0; i<N; i++) {
    for (int j = 0; j<M; j++) {
        cin >> grid[j, i];

    }
}
for (int i = 0; i<N; i++) {
    for (int j = 0; j<M; j++) {
        cout << grid[j, i];

    }
    cout << "\n"
}
Run Code Online (Sandbox Code Playgroud)

我以n行和m列的表格形式提供了输入

2 1 1 1 -1 -1 -1 -1 
2 1 1 1 -1 -1 -1 -1
-1 1 1 1 -1 -1 -1 -1
-1 1 1 1 -1 -1 -1 -1
-1 1 1 1 1 -1 -1 -1
-1 -1 1 1 1 1 -1 -1
-1 -1 1 1 1 1 1 -1
Run Code Online (Sandbox Code Playgroud)

但答案是

-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-12
Run Code Online (Sandbox Code Playgroud)

Ted*_*gmo 5

grid[j, i]只会扔掉j-,所以您正在做grid[i]i仅使用1D数组寻址。

grid[i][j]是解决2D数组中元素的常用方法,如果您将其声明为,则可以使用int grid[N][M]

如果您具有一维数组(int grid[N*M]),并使用它来存储2D数据,则

grid[j*N + i] 要么 grid[j + i*M]

看起来像您所需要的。


例:

#include <iomanip>
#include <iostream>
#include <sstream>

// simulated cin
std::istringstream cin(
    "2 1 1 1 -1 -1 -1 -1\n"
    "2 1 1 1 -1 -1 -1 -1\n"
    "-1 1 1 1 -1 -1 -1 -1\n"
    "-1 1 1 1 -1 -1 -1 -1\n"
    "-1 1 1 1 1 -1 -1 -1\n"
    "-1 -1 1 1 1 1 -1 -1\n"
    "-1 -1 1 1 1 1 1 -1\n");

int main() {
    constexpr int N = 7;
    constexpr int M = 8;
    int grid[N * M];

    for(int i = 0; i < N; i++) {
        for(int j = 0; j < M; j++) {
            cin >> grid[j + i * M];
        }
    }
    for(int i = 0; i < N; i++) {
        for(int j = 0; j < M; j++) {
            std::cout << std::setw(2) << grid[j + i * M];
        }
        std::cout << "\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

 2 1 1 1-1-1-1-1
 2 1 1 1-1-1-1-1
-1 1 1 1-1-1-1-1
-1 1 1 1-1-1-1-1
-1 1 1 1 1-1-1-1
-1-1 1 1 1 1-1-1
-1-1 1 1 1 1 1-1
Run Code Online (Sandbox Code Playgroud)

  • 问题在于问题中显示的实际输出不是指针。因此,“ grid”不是“ 2d”数组。但这实际上可能是OP遇到问题的原因吗? (2认同)