对于大于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;
过于宽泛。你永远不会想要/需要所有的性病,要更有选择性。