对不起,如果这是一个有点愚蠢的问题。
这是我的代码:
#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#####
有什么想法吗?
答案 0 :(得分:2)
首先进行循环:
//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;
}
在再次阅读之前,请务必确保从输入流中获取尾随输入。
答案 1 :(得分: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;
答案 2 :(得分:0)
我认为你的输出中需要一些换行符
for(int j=0; j<rows; j++)
{
for(int i=0; i<columns; i++)
{
cout<<map[j][i];
}
cout << '\n';
}