数组不会打印超过特定索引限制的正确值

  • 本文关键字:索引 打印 数组 c++
  • 更新时间 :
  • 英文 :


对于大于5,5的输入(m和n各自的值在下面的代码中),下面的代码给出了一个非常错误和随机的输出。为什么会这样呢?解决这个问题的办法是什么?

#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int m,n;
cin>>m>>n;
int i,j,k;
int a[m][n];
k = 1;
a[0][0] == 1;
for(i=0;i<m;i++){

for(j=0;j<n;j++){
cout<<(a[0][0]+k*(j+1))<<" ";
}

k = k+2;
cout<<'n';
}

}
return 0;
}

如果在启用警告的情况下编译此代码,将得到:

<source>:18:15: warning: equality comparison result unused [-Wunused-comparison]
a[0][0] == 1;
~~~~~~~~^~~~
<source>:18:15: note: use '=' to turn this equality comparison into an assignment
a[0][0] == 1;
^~
=
1 warning generated.

你不需要比较,但是a[0][0] = 1;


现在你不应该做的事情:

  • int a[m][n];不是c++,而是一个编译器扩展。使用std::vector
  • int a[m][n];使数组未初始化,并且您只写入a[0][0](如果您修复==)。
  • a永远不会被使用,除了a[0][0]。整个排列完全没有意义。一个单独的const int a = 1;也会做同样的事情。
  • #include <bits/stdc++.h>是错误的,甚至在许多编译器上都不存在
  • using namespace std;过于宽泛。你永远不会想要/需要所有的性病,要更有选择性。

最新更新