C++中的数组输入代码有什么不对?

C++中的数组输入代码有什么不对?,c++,arrays,C++,Arrays,我需要制作一个从键盘输入生成2D数组的代码,以便在程序中使用它。我在代码中找不到任何问题,但它不能正常工作。你能解释一下吗?我需要一个尽可能简单的解决方案,因为我还是个初学者 #include <iostream> using namespace std; int main(){ int n,m; cin >> n; cin >> m; int s[n-1][m-1]; for(int i=0; i<n; i++){ for(int j=0; j&l

我需要制作一个从键盘输入生成2D数组的代码,以便在程序中使用它。我在代码中找不到任何问题,但它不能正常工作。你能解释一下吗?我需要一个尽可能简单的解决方案,因为我还是个初学者

#include <iostream>
using namespace std;
int main(){
int n,m;
cin >> n;
cin >> m;
int s[n-1][m-1];
for(int i=0; i<n; i++){
  for(int j=0; j<m; j++){
    cin >> s[i][j];
  }
}
//Test by printing out the elements
for (int i=0; i<n; i++){
  for (int j=0; j<m; j++){
    cout << s[i][j] << " ";
  }
}
输出:

 1 2 3 5 5 6 7 9 9 0 1 2

元素s[0][3]等于s[1][0],s[1][3]等于s[2][0]。如何???

您的行和列混淆了。当它应该是s[j][i]时,你有s[i][j]。而且,对于int s[n-1][m-1];去吧,我相信你搞错了。当数组从索引0开始并转到索引大小-1时,初始化它时,它应该是数组[enteredSize],而不是数组[enteredSize-1]。祝你好运

这里有一个off by one错误:int s[n-1][m-1]。这应该是int s[n][m];等等,s[n]中的n是多少,元素数还是最后一个索引?当您声明数组int s[n]时,它有n个元素。指数范围从0到n-1,该int s[n-1][m-1];只是不有效的C++。C++中数组的维数必须是编译时常数。如果M是元素的数目,为什么S(2)[0 ]到S(2)[M-1 ]正确定义?我已经尝试过了,但它没有用。我认为Peter Ruderman在评论中说的是问题所在。是的,在我刚刚测试了你的代码之后,我也注意到了这个错误并编辑了我的答案。好的。谢谢我刚开始上编程课,这是我没有正确理解的。
 1 2 3 5 5 6 7 9 9 0 1 2