0

对不起,如果这是一个有点愚蠢的问题。

这是我的代码:

#include<iostream>
using namespace std;

int main()
{
  int columns, rows;
  char **map;

  cin>>columns;
  cin>>rows;

  /*creats array of pointers rows tall*/
  map = new char*[rows];

  /*creats array of chars columns tall*/
  for(int i=0; i<rows; i++)
    map[i] = new char[columns];

  //populate map with input
  map[0][0] = cin.get();
  for(int j=0; j<rows; j++)
    for(int i=0; i<columns; i++)
    {
      if (cin.peek() == '\n')
        cin.ignore(256, '\n');
      else
        map[j][i] = cin.get();
    }


  //DISPLAY
  cout<<endl;
  for(int j=0; j<rows; j++)
  {
    for(int i=0; i<columns; i++)
    {
      cout<<map[j][i];
    }
  }
  return 0;
}

用户将输入如下内容:

7 4
#######
#S#   #
#   #E#
#######

我想输出它。但是我的结果如下:

#######
#S#    
##   #
E#####

有什么想法吗?

4

3 回答 3

2

第一个for循环:

  //populate map with input

  for(int j=0; j<rows; j++)
  {
    cin.get();
    for(int i=0; i<columns; i++)
    {
      if (cin.peek() == '\n')
        cin.ignore(256, '\n');
      else
        map[j][i] = cin.get();
    }
  }

并将新行添加到输出:

  //DISPLAY
  cout<<endl;
  for(int j=0; j<rows; j++)
  {
    for(int i=0; i<columns; i++)
    {
      cout<<map[j][i];
    }
    cout << endl;
  }

在再次读取之前,请务必确保从输入流中获取尾随输入。

于 2012-10-19T15:41:45.200 回答
1

几件事

  • 首先,您不需要map[0][0] = cin.get();在循环之前,因为您将map[0][0]在循环期间获得

  • 其次,如果有新行,则循环会跳过它,但也不会填充该位置的矩阵。你应该有这样的东西:

for(int j=0; j<rows; j++)
    for(int i=0; i<columns; i++)
    {
      while (cin.peek() == '\n')
        cin.ignore(256, '\n');
      map[j][i] = cin.get();
    }

当有 '\n' 字符时,只需跳过(忽略)。

  • 第三,虽然与您的问题无关。完成后,您应该始终释放动态分配的内存(以防您忘记了)

    delete [] map[i]; delete [] map;

于 2012-10-19T15:44:08.340 回答
0

我认为您的输出中需要一些换行符

  for(int j=0; j<rows; j++)
  {
    for(int i=0; i<columns; i++)
    {
      cout<<map[j][i];
    }
    cout << '\n';
  }
于 2012-10-19T15:27:49.323 回答