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+
++++++