我正在编写一个代码来创建一个值,并创建一个大小为1s的金字塔的矩阵,因此顶部是x-1元素。例如,如果输入是五,则输出将是:C++中的矩阵输出不正确
0 0 0 0 1 0 0 0 0
0 0 0 1 0 1 0 0 0
0 0 1 0 0 0 1 0 0
0 1 0 0 0 0 0 1 0
1 0 0 0 0 0 0 0 1
问题是代码生成的值,不应该是一个,或它是不输出矩阵的正确方法。我试图在代码中添加一个cout,它将一些值定义为1,这些值都是正确的,所以我相信问题出在输出中。例如,x的输入会给
0 0 0 0 1 0 0 0 1
0 0 0 1 0 1 0 1 0
1 0 1 0 0 0 1 0 0
0 1 0 0 0 1 0 1 0
1 0 1 0 0 0 0 0 1
的代码如下:
#include <iostream>
using namespace std;
int main() {
cout << "Matrix size:";
int x;
cin >> x;
int arr1[2*x][x];
for (int initialX=0; initialX<x; initialX++){
for (int initialY=0; initialY<=((2*x)-2); initialY++){
arr1[initialX][initialY]=0;
}
}
for (int set=0; set<x; set++){
arr1[set][x-1-set]=1;
arr1[set][x-1+set]=1;
}
for (int outX=0; outX<x; outX++){
for (int outY=0; outY<(2*x-1); outY++){
cout << arr1[outX][outY] << " ";
}
cout << endl;
}
return 0;
}
这与矩阵工作在C我第一次++,因此关于矩阵任何帮助表示赞赏。另外,如果它非常重要,我正在使用C++ 11。先谢谢你。
VLAs是非标准的C++,即使它们在您的编译器中工作,您也应该避免使用它们。 – ArchbishopOfBanterbury
欢迎来到Stack Overflow!这听起来像你可能需要学习如何使用调试器来遍历代码。使用一个好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏离的位置。如果你打算做任何编程,这是一个重要的工具。进一步阅读:[如何调试小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –
请看看这个为什么你[不应该使用可变长度数组](http://ideone.com/1mcWo6)。使用'std :: vector'和'at()'清楚地说明了问题所在。使用VLA的人员的帖子数量很多,并且出现了分段错误或输出错误的问题,如果VLA的使用已停止,并且使用了“矢量”(与另外的vector :: at ()'call)。 – PaulMcKenzie