C++萌新请大佬帮忙解答

具体问题如下:
室内平面图设计程序
1)用户输入房间的长度和宽度,门、窗、家具的位置。放置规则:窗户和门必须在墙上且不能再拐角,窗户不能紧靠门,家具必须在室内且不能堵门。不合规则要提示重新输入;
2)根据上述参数绘制房间图样,墙用'#'表示,门用空格表示,窗户用'|'或'-'表示(前者在竖墙上,后者在横墙上),家具用'*'表示。
###-######

*

##########
这是一个10x7的房间,左上角坐标为(0,0),门在(9,2),窗在(3,0),家具在(2,4)

本人只能写到第1部分结束orz,实在不会写后面的,请大佬解答(目前只学到了函数的一点点,尽量不要用太高级的写法,写得好私戳我给红包)(示意图有误,大致理解即可)

c++

1个回答

图片说明

#include<iostream>
using namespace std;
int main(){
    int length, width;
    cout << "输入房间长度和宽度(以空格分隔,下同):";
    cin >> length >> width;
    char room[100][100];
    for (int i = 0; i < width; i++) {
        for (int j = 0; j < length; j++) {
            if (i == 0 || i == width - 1 || j == 0 || j == length - 1)
                room[i][j] = '#';
            else
                room[i][j] = ' ';
        }
    }
    int x, y;
    cout << "输入门的坐标:";
    cin >> x >> y;
    while (room[y][x]!='#' || ((x == 0 || x == length - 1) && (y == 0 || y == width - 1))) {
        cout << "门必须在墙上且不能再拐角,请重新输入:";
        cin >> x >> y;
    }
    int doorx = x, doory = y;
    room[y][x] = ' ';
    cout << "输入窗户的坐标:";
    cin >> x >> y;
    while (room[y][x] != '#' || ((x == 0 || x == length - 1) && (y == 0 || y == width - 1)) ||((x==0||x==length-1)&&(room[y-1][x]==' '||room[y+1][x]==' '))|| (y == 0 || y == width - 1) && (room[y][x+1] == ' ' || room[y][x-1] == ' ')) {
        cout << "窗户必须在墙上且不能再拐角,且不能紧靠门,请重新输入:";
        cin >> x >> y;
    }
    if (x == 0 || length == length - 1) 
        room[y][x] = '|';
    else
        room[y][x] = '-';

    cout << "输入家具的坐标:";
    cin >> x >> y;
    while (!(0<x&&x<length&&0<y&&y<width)||(y==doory&&abs(x-doorx)==1)||(x==doorx&&abs(y-doory)==1)) {
        cout << "家具必须在室内,且不能堵门,请重新输入:";
        cin >> x >> y;
    }
    room[y][x] = '*';

    //显示房间
    for (int i = 0; i < width; i++) {
        for (int j = 0; j < length; j++)
            cout << room[i][j];
        cout << endl;
    }
    return 0;
}

qq_40946921
Italink 回复qq_40946921: 我的while里面逻辑判断有点乱,如果你想让代码更直观一点的话,可以单独的写几个判断函数
一年多之前 回复
qq_40946921
Italink 回复qq_40946921: 这个房间可以当成一个二维的数组,只要对这个数组进行操作就行了。如果不用数组的话,全靠坐标,就需要自己思考很多数学问题,所以不妨“粗暴”一点,把那些交给计算机去处理
一年多之前 回复
qq_40946921
Italink 回复qq_43548756: 可以啊,用数组是为了方便描述,不用数组的话,逻辑运算更多,一不小心就出错了
一年多之前 回复
qq_43548756
qq_43548756 很棒!请问有不用数组的写法吗?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问