我正在尝试使用嵌套for循环输出一个简单的2D char数组
它不以" Square形式"输出,也崩溃。
#include <iostream>
using namespace std;
int main(){
char array[x][y] = {
"000000",
"0 0",
"0 0",
"000000",
};
for (int i = 1; i <=x; i++) {
for (int j = 1; j <=y; j++)
cout << array[i][j];
}
}
答案 0 :(得分:2)
C ++使用基于零的索引
你的循环应该像
for (int i = 0; i <x; i++)
https://en.wikipedia.org/wiki/Zero-based_numbering
这就是它崩溃的原因
此外,您不打印换行符。在外部循环中插入cout << std::endl
答案 1 :(得分:1)
数组基于零,因此您应该从0
循环到x-1
,而不是从1
循环到x
。
您还需要一个换行符,否则它将全部写在同一行。
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; i++) {
cout << array[i][j];
}
cout << std::endl;
}
答案 2 :(得分:0)
我认为x和y是定义为
的常量const size_t x = 4;
const size_t y = 7;
C ++不允许将非常量表达式用作数组大小,尽管某些编译器具有允许使用可变长度数组的自己的语言扩展。
在这种情况下这个数组
char array[x][y] = {
"000000",
"0 0",
"0 0",
"000000",
};
可以通过以下方式输出
for ( auto &s : array ) std::cout << s << std::endl;
考虑到C ++中的数组索引从0开始。所以如果要使用索引,那么循环可能看起来像
for ( size_t i = 0; i < x; i++ ) std::cout << array[i] << std::endl;
考虑到要输出此形状,不需要声明2D数组。:)
这是一个示范程序
#include <iostream>
#include <iomanip>
int main()
{
size_t n = 4;
size_t m = 6;
char c = '*';
for ( size_t i = 0; i < n; i++ )
{
std::cout << c
<< std::setfill( i % ( n - 1 ) == 0 ? c : ' ' )
<< std::setw( m - 1 )
<< c << std::endl;
}
}
它的输出符合您的预期:)
******
* *
* *
******
答案 3 :(得分:-1)
并且有人可以解释为什么第二种方法在其他位置输出数组?我的意思是它开始在第二行输出而第一种方法从00coord输出(通过coord它在控制台中的平均位置,而不是数组位置)
for (int i = 0; i < x; i++)
cout << array[i] << endl;
for (int i = 0; i <x; i++) {
cout << endl;
for (int j = 0; j <y; j++)
cout << map[i][j];
}