我已经尝试了大约2天,我想我已经接近但仍然没有雪茄! 我有一个看起来像这样的文本文件:
++++++
+H +
+ +
+ +
+ X+
++++++
如果我尝试正常打印出来,一切正常:
void Level::LevelPrinter() //This prints out fine
{
inputMap.open("Level1.txt");
string input;
while (getline(inputMap, input))
{
cout << input << endl;
}
}
但是当我尝试将所有这些符号放入2D数组时,我会在某些形式的代码中获得空格,我尝试过;或者,在我最近的尝试中,似乎最接近我需要的东西,我将奇怪的符号放在正确的位置。我无法弄清楚出了什么问题......
这是我现在正在尝试的代码:
void Level::LevelPrinterArray()
{
inputMap.open("Level1.txt");
char MapSymbols;
int Rows, Cols;
{
for (Rows = 0; Rows < 6; Rows++)
{
for (Cols = 0; Cols < 6; Cols++)
{
inputMap >> MapSymbols;
MapLayoutArray[Rows][Cols] = MapSymbols;
cout << MapSymbols;
}
cout << endl;
}
}
}
这就是控制台告诉我的:
╠╠╠╠╠╠
╠╠╠╠╠╠
╠╠╠╠╠╠
╠╠╠╠╠╠
╠╠╠╠╠╠
╠╠╠╠╠╠
btw,MapLayoutArray只是:
char MapLayoutArray[6][6];
RadLexus,我试过不使用&gt;&gt;所以它看起来像这样:
void Level::LevelPrinterArray()
{
inputMap.open("Level1.txt");
char MapSymbols;
int Rows, Cols;
{
for (Rows = 0; Rows < 6; Rows++)
{
for (Cols = 0; Cols < 6; Cols++)
{
inputMap.get(MapSymbols);
MapLayoutArray[Rows][Cols] = MapSymbols;
cout << MapSymbols;
}
cout << endl;
}
}
}
那也打印出来:
╠╠╠╠╠╠
╠╠╠╠╠╠
╠╠╠╠╠╠
╠╠╠╠╠╠
╠╠╠╠╠╠
╠╠╠╠╠╠
----- ------ UPDATE
在第一个代码上使用.close(我说的正常工作)。使第二个代码上的字符显示为普通字符!问题是 - 他们现在看起来像这样:
++++++
+H
+
+
+
+
+
+
X+
+
使用代码玩了一下,现在这段代码:
void Level::LevelPrinterArray()
{
inputMap.open("Level1.txt");
char MapSymbols;
{
for (int Rows = 0; Rows < 6; Rows++)
{
for (int Cols = 0; Cols < 6; Cols++)
{
inputMap.get(MapSymbols);
if (MapSymbols != '\n')
{
MapLayoutArray[Rows][Cols] = MapSymbols;
cout << MapSymbols;
}
else
{
cout << endl;
}
}
}
}
inputMap.close();
cout << endl;
}
导致这个:
++++++
+H +
+ +
+ +
+ X+
+
Press any key to continue . . .
所以我非常接近,但我无法打印最后一行。我尝试了很多东西来打印最后一行,就像制作第一个for循环“Rows&lt; = 6”但是正确地打印出最后一行并且崩溃控制台时出错... 我会更多地玩这个...如果你们有任何想法,请告诉我。如果我搞清楚,我会在这里更新......
答案 0 :(得分:0)
inputMap >> MapSymbols;
运营商&gt;&gt;忽略每个白色字符,包括空格。
inputMap.get(MapSymbols);
使用正确的函数来考虑空格,但是忘记了当你获得换行符'\n'
时,你不能等到下一次迭代来读取(好的)下一个字符。您可能还会遇到'\r'
,具体取决于操作系统。
您可以使用std::ws
在每行 1 的末尾跳过这些空格:
for (std::size_t Rows = 0; Rows < 6; Rows++)
{
for (std::size_t Cols = 0; Cols < 6; Cols++)
{
char MapSymbols;
inputMap.get(MapSymbols);
MapLayoutArray[Rows][Cols] = MapSymbols;
std::cout << MapSymbols;
}
inputMap >> std::ws; // HERE
std::cout << std::endl;
}
1 假设行不以空格开头,否则使用ignore()成员函数。
答案 1 :(得分:0)
我试图在我的电脑上解决您的问题。
我做的改变是我迭代当前行并通过char将其插入数组 char。
此代码效果很好:
#include <string>
#include <iostream>
#include <fstream>
int main(){
std::ifstream inputMap("C:\\Res\\Level1.txt");
char arr[6][6];
for (int i = 0; i < 6; i++)
{
std::string input;
std::getline(inputMap, input);
for (int k = 0; k < input.length(); k++)
{
arr[i][k] = input[k];
std::cout << input[k];
}
std::cout << std::endl;
}
std::cout << std::endl;
for (size_t l = 0; l < 6; l++)
{
for (size_t m = 0; m < 6; m++)
{
std::cout << arr[l][m];
}
std::cout << std::endl;
}
system("PAUSE");
return 0;
}
输出符合要求(我在此复制)。
出于您的目的,只是不要在第一次或第二次打印;)
++++++
+H +
+ +
+ +
+ X+
++++++
++++++
+H +
+ +
+ +
+ X+
++++++