C++ 正在尝试将文本文件(ifstream)转换为c++;
我已经试了大约两天了,我想我已经接近了,但仍然没有雪茄! 我有一个如下所示的文本文件:C++ 正在尝试将文本文件(ifstream)转换为c++;,c++,arrays,multidimensional-array,ifstream,chars,C++,Arrays,Multidimensional Array,Ifstream,Chars,我已经试了大约两天了,我想我已经接近了,但仍然没有雪茄! 我有一个如下所示的文本文件: ++++++ +H + + + + + + X+ ++++++ ++++++ +H + + + + + + X+ + 如果我试着正常打印出来,一切正常: void Level::LevelPrinter() //This prints out fine { inputMap.open("Level1.txt"); string input; w
++++++
+H +
+ +
+ +
+ X+
++++++
++++++
+H
+
+
+
+
+
+
X+
+
如果我试着正常打印出来,一切正常:
void Level::LevelPrinter() //This prints out fine
{
inputMap.open("Level1.txt");
string input;
while (getline(inputMap, input))
{
cout << input << endl;
}
}
顺便说一句,Maplayoutaray只是:
char MapLayoutArray[6][6];
RadLexus,我尝试不使用>>,因此它看起来像这样:
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;
}
}
}
-----更新------
在第一个代码上使用.close(我所说的代码可以正常工作)。使第二个代码上的字符显示为普通字符!问题是-它们现在看起来像这样:
++++++
+H +
+ +
+ +
+ X+
++++++
++++++
+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;
}
所以我非常接近,但我无法让它打印最后一行。我尝试了很多方法让它打印最后一行,比如第一次尝试第一个for循环“行”
运算符>>忽略所有白色字符,包括空格
第二次和第三次尝试
使用正确的函数来考虑空格,但是您忘记了当您获取换行符'\n'
时,您不能等待下一次迭代来读取(好的)下一个字符。根据操作系统的不同,您可能还会遇到'\r'
解决办法
您可以使用std::ws
跳过每行末尾的这些空格1:
for(std::size\u t Rows=0;Rows<6;Rows++)
{
对于(std::size\u t Cols=0;Cols<6;Cols++)
{
字符映射符号;
inputMap.get(地图符号);
MapLayoutArray[行][Cols]=地图符号;
std::cout>std::ws;//这里
我试着在我的电脑上解决你的问题
我所做的更改是迭代当前行并将其逐个字符插入数组
此代码非常有效:
#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;
}
看起来您正在存储指针,而不是实际读取的字符。请再次提醒我,是否应该使用>
字符?您遗漏了关键信息-特别是什么是MapLayoutArray
?在任何情况下,请尝试提供一个小而完整的代码示例(从某种意义上说,其他人可以复制您的问题)。遗漏细节会大大增加遗漏与您的问题实际相关的信息的几率。抱歉,地图布局数组只是-char MapLayoutArray[6][6];我将在那里添加…除此之外,这是与此相关的全部代码…Rad Lexus我还添加了一条关于u在原始问题中所说内容的注释,没有使用>>并没有解决它…可能是文件编码的问题。如果是ANSI编码,则使用inputMap.get
的代码应该可以工作。我只是确保保存我的t使用ANSI编码,但问题仍然存在…更新-奇怪的字母已修复,现在有一个不同的问题。更新在原始问题的底部…谢谢朋友,工作得很有魅力!你认为可能不可能按照我最初计划的方式来做吗?使用字符而不是字符串?不是说我在使用字符串方面有问题,而是现在我很想找到一种使用chars的方法。哦,顺便说一句,我试着读了一下size\u t和正常无符号int之间的区别,但没有弄清楚。你能给我一些启发吗?@Mr.Trainee我编辑了下面的答案,向你展示了一个解决方案。关于std::size\u t
,你读了吗?
++++++
+H +
+ +
+ +
+ X+
+
Press any key to continue . . .
inputMap >> MapSymbols;
inputMap.get(MapSymbols);
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;
}
#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+
++++++