输入和输出的2D char数组问题

时间:2016-03-30 04:55:39

标签: c++ arrays

我在这个家庭作业问题上遇到了一些麻烦。我们基本上是在制作一个由人物填充的“迷宫”。但是,我不知道如何开始,因为我在创建2D char数组时遇到了问题。这是我目前的代码:

char** read_labyrinth  (int* rows, int* cols)
{ 
    cin >> *rows >> *cols;

   char **labyrinth = NULL;
   labyrinth = new char*[(*rows)]

   for (int i = 0; i < (*rows); i++)
   {
         labyrinth[i] = new char[(*cols)];
   }

   for (int i = 0; i < (*rows); i++)

   {
       cin >> labyrinth[i];   
   }

  return labyrinth;
}

我也有这个打印迷宫,但没有打印出来。该程序开始执行类似./labyrinth&gt;的操作。 labyrinth1.in 其中文本文件有两个数字用于行和列,以及一堆字符,如#*填充,但没有输出任何内容。如果有的话,行和列似乎设置了垃圾值,所以我认为我必须做一些非常错误的事情。这是打印功能

void print_labyrinth (char** maze, int rows, int cols)
{
     for (int i = 0; i < rows; i++)
      {
            cout << maze[i];
      }

}

感谢您的帮助。我很失落。

2 个答案:

答案 0 :(得分:1)

让我们从2D需要2个维度开始,我的意思是,对于输出,你需要两个嵌套的for循环(这适用于任何类型的数据,不仅适用于char,当然还有汽车的输出可以使用C样式字符串,即char*,如果你存储'\0' - 现在你不要!),例如:

void print_labyrinth (char** maze, int rows, int cols)
{
     for (int i = 0; i < rows; i++)
     {
         for (int j = 0; j < cols; j++)
         {
            cout << maze[i][j];
         }
         cout << endl;
      }

}

我在内存分配和填充部分中看到的类似问题...考虑在cin >> maze[i]的第一个循环内使用read_labyrinth更改和移动循环,例如:

   for (int i = 0; i < (*rows); i++)
   {
         // memory allocation for row
         maze[i] = new char[(*cols)];
         // data reading to allocated mempory
         for (int j = 0; j < (*cols); j++)
         {
             cin >> maze[i][j];
         }
   }

另外,我建议您在将内容写入内存之前使用if(maze != NULL)if(maze[i] != NULL)检查内存分配结果

答案 1 :(得分:0)

这个基本样本对我有用:

#include <iostream>
using namespace std;

char** read_labyrinth  (int rows, int cols)
{ 

   char **labyrinth = NULL;
   labyrinth = new char*[rows];

   for (int i = 0; i < rows; i++)  {
         labyrinth[i] = new char[cols];
   }

   for (int i = 0; i < rows; i++)   {
    for (int j = 0; j < cols; j++)
      {
          cin >> labyrinth[i][j];   
      }
   }
  return labyrinth;
}
void print_labyrinth (char** maze, int rows, int cols)
{
    cout << "labyrinth is : \n";
     for (int i = 0; i < rows; i++)
      {
        for (int j = 0; j < cols; j++){
                cout << maze[i][j];
            }
               cout<<"\n";
      }    
}
int main() 
{
    int r, c;
    cout << "enter no of rows and colomuns \n";
    cin >> r >> c;
    print_labyrinth(read_labyrinth(r,c),r,c);
    return 0;
}

在线编辑器链接ideone - link

你也需要小心释放记忆。