打印从文件读入的2D字符数组

时间:2017-12-04 02:41:12

标签: c++ arrays loops formatting output

目前正在开展一个涉及2D char数组的学校项目,该数组表示一个房间的俯视图,其中'W'=墙,'F'=家具,''=自由空间。该数组应从文件中读入(文件内容如下)。

文件:

2                                   
W   W   W   W   W   W   W   W   W   W
W       F       F   F               W
W       F       F   F       F   F   W
W       F       F   F       F   F   W
W       F       F   F       F   F   W
W       F       F   F       F   F   W
W       F       F   F       F   F   W
W       F       F   F       F   F   W
W       F                   F   F   W
W       F                   F   F   W
W           F               F   F   W
W   F       F               F   F   W
W   F       F               F   F   W
W                           F   F   W
W   W   W   W   W   W   W   W   W   W



W   W   W   W   W   W   W   W   W   W
W   F   F   F   F   F       F       W
W   F   F   F   F   F       F       W
W   F   F   F   F   F       F       W
W   F   F   F       F       F       W
W   F   F   F       F       F       W
W   F   F   F       F       F       W
W                   F               W
W                   F       F       W  
W   F   F   F               F       W
W   F   F   F   F           F       W
W   F   F   F   F           F       W
W   F   F   F   F   F       F       W
W   F   F   F   F   F       F       W
W   W   W   F   W   W   W   W   W   W

'2'现在无关 - 它代表了房间配置的数量。我知道我将不得不在项目后期使用该数字进行循环。

在我开始这个项目之前,我想打印出我的输入,以确保我在文件中正确阅读。无论我尝试什么,我似乎无法得到正确的配置。我试过>> skipws以及file.get()在我的代码中的多个点,并使用这些给我不同的输出,但没有匹配原始文件。

我目前的代码:

    int main()
{
    //Variables
    int i;
    int j;
    char room_array[room_height][room_width];
    char piece_of_room;
    int num_of_room_configurations;

//Create File, Open File, and Check File
ifstream room_file;
room_file.open("C:\\(path)\\rooms.txt"); 
if (room_file.fail())
    {
        cout << "Could not open file." << endl;
        system("pause");
        return 0;
    }

//Loop Control / Use File; The Number of Room Configs (will need to put this in a loop later)
room_file >> num_of_room_configurations;
cout << "Number of different room layouts: " << num_of_room_configurations << endl << endl;

//Create Room Array / Use File
for (i = 0; i < room_height; i++) //moves through rows
{
    cout << endl;
    for (j = 0; j < room_width; j++) //moves through columns
    {
        room_file >> piece_of_room; //reading in values from file
        room_array[i][j] = piece_of_room; 
    }
}

//Echo Original Room Layout
cout << endl << "ORIGINAL ARRAY:" << endl;
for (i = 0; i < room_height; i++) //moves through rows
{
    cout << endl;
    for (j = 0; j < room_width; j++) //moves through columns
    {
        cout << room_array[i][j]; //formatting
    }
}
cout << endl << endl;

system("pause");
    return 0;

我已尝试包含空格以使代码更简单,因此使用此特定代码我将其作为输出:

link to output screencap

对这么长的问题道歉,但我想确定我没有遗漏任何可以帮助我帮助的人。我无论如何都对C ++没有很好的理解,所以我错过了一些非常基本的东西。任何帮助都将非常感谢,提前谢谢。

此外,这是我的第一篇文章 - 如果我做错任何事情请告诉我,如果可能我会编辑。

1 个答案:

答案 0 :(得分:0)

在阅读文件时,您使用&gt;&gt;运算符来获取每个字符。但不知何故,它没有认识到空间或跳过它。我不确定为什么。如果您尝试与其他角色说“B&#39;”而不是空格,我相信您的代码将完美无缺。 您可以参考以下链接&gt;&gt;运营商在ifstream上工作

http://www.cplusplus.com/reference/fstream/ifstream/

我建议你使用getline()函数来读取输入文件,这会更简单,更简单。您的代码可能如下所示(例如)

for (i = 0; i < room_height; i++) //moves through rows
{
    room_file.getline (&room_array[i][0],9); 
}