繁体   English   中英

我如何将它打印在同一行上

[英]How would i print this on the same line

我正在尝试编写一个使用多个字符构建“建筑物”的程序。 有3个功能:

  1. int ValidateData(int low, int high, char type)

此函数验证用户输入是否满足所需参数,并根据type参数返回正确的数字。

这里没有问题。

  1. int drawUpperFloors(int numOfWindows)

这个函数应该根据用户输入的窗口数量来绘制楼层数。 我的问题是我似乎无法让窗户在同一条线上绘制。 如果用户输入 3,输出应该是:(花了一段时间才弄对)

+---------------+ | | | === === === | | | | | | | | | | === === === | | |

相反,我在新行上得到一个窗口,直到循环达到其限制( numOfWindows ),所以如果numOfWindows = 20 那么我在不同的行上得到 20 个窗口。 我希望能深入了解我如何做到这一点。

  1. void DrawGroundFloor(int numOfWindows)

    该函数几乎与drawUpperFloors( )函数相同,只是第一个窗口将被替换为一扇门。 因此,如果 numOfWindows 参数为 2,则底层将由 1 个门和 1 个窗口组成。 如果窗口数仅为 1,则只会绘制一扇门。

    请注意以下细节:a)。 每个窗户(和门)正好是 3 列宽。

    b)。 地板的底部是使用 * 字符绘制的。

    一楼有 5 个窗户的例子是:

+-----------------------+ | | | === === === === === | | | | | | | | | | | | | | | | === === === === | | | | | *************************

考虑到我一直无法执行第二个功能,这不足为奇。

我已经尝试使用ifelse最多使用 3 个循环,但我仍然不能,无论我尝试什么(偶数模数)都将它打印在同一行中。 任何输入将不胜感激。

编辑这里是到目前为止 2 个函数的代码

int GetValidData(int low, int high, char type)
{
    int number;
    int number2;

    int i=1;
    int j;
    if (type == 'F')
    {
        printf("Enter the amount of floors you would like(1-1000)\n");
        scanf("%d", &number);
        fflush(stdin);


        if (number < 1 || number>1000)
        {
            while(i!=0)
            {
                printf("You have entered an invalid floor number\nPlease enter a valid number: ");

                scanf("%d", &number);
                fflush(stdin);
                if (number >= 1 && number <= 1000)
                {
                    printf("Thank you!\n");
                    i = 0;

                }
            }

        }
        return number;
    }



    printf("Enter the amount of windows you would like(1-20)\n");
    scanf("%d", &number);


    if (type == 'W')
    {
        if (number < 1 || number>20)
        {
            while(i!=0)
            {
                printf("You have entered an invalid number\nPlease enter a valid number: ");
                scanf("%d", &number);
                if (number >= 1 && number <= 20)
                {
                    printf("Thank You!\n");
                    i = 0;
                }
            }

        }

        return number;




int drawUpperFloors(int numOfWindows)
{
    int check = numOfWindows;
    int i;
    int j;
    for (i = 0; i <= numOfWindows;i++)
    {
        printf("===\n");
        for (j = 0; j <= numOfWindows;j++)
        {
            printf("|  |\n");
        }

        printf("===");
    }

}

我的问题是我似乎无法让窗户在同一条线上绘制。

基本问题是您在绘制单个窗口时向打印语句添加换行符。

for (i = 0; i <= numOfWindows;i++)
{
    /* There shouldn't be a newline here */
    printf("===\n");
    for (j = 0; j <= numOfWindows;j++)
    {
        /* Nor a newline here */
        printf("|  |\n");
    }

    printf("===");
}

您还从 0 开始计算您的窗口,这会导致一个窗口过多。 要么从 1 开始,要么一直到i < numOfWindows

您必须在自己的循环中绘制每条线,包括外墙,并以换行符结尾。 首先是上门槛,然后是窗户,然后是下门槛。

void drawUpperFloors(int numOfWindows)
{
    int i;

    /* Draw the upper sills, including the outer walls */
    printf("|  ");
    for (i = 1; i <= numOfWindows;i++)
    {
        printf("=== ");
    }
    printf(" |\n");

    /* Draw the windows, including the outer walls */
    printf("|  ");
    for (i = 1; i <= numOfWindows;i++)
    {
        printf("| | ");
    }
    printf(" |\n");

    /* Draw the lower sills, including the outer walls */
    printf("|  ");
    for (i = 1; i <= numOfWindows;i++)
    {
        printf("=== ");
    }
    printf(" |\n");
}

这会变得重复,因此最好将绘制一条地板线放入一个函数中。

void drawFloorLine(int num, const char *to_repeat) {
    int i;

    printf("|  ");
    for (i = 1; i <= num;i++)
    {
        printf("%s", to_repeat);
    }
    printf(" |\n");
}

void drawUpperFloors(int numOfWindows)
{
    drawFloorLine(numOfWindows, "=== ");    
    drawFloorLine(numOfWindows, "| | ");
    drawFloorLine(numOfWindows, "=== ");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM