如何使用嵌套for循环输出2D char数组?

时间:2015-08-11 14:29:29

标签: c++ loops for-loop

我正在尝试使用嵌套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];
        }
}

4 个答案:

答案 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];

}