我如何在同一行上打印

时间:2016-12-04 03:34:45

标签: c

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

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

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

这里没问题。

  1. int drawUpperFloors(int numOfWindows)
  2. 此功能应根据用户输入的窗口数绘制楼层数。我的问题是我似乎无法让窗户在同一条线上绘制。如果用户输入3,则输出应该是:(花了一段时间才能做到这一点)

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

    相反,我在一个新行上有一个窗口,直到循环达到其极限(numOfWindows),所以如果numOfWindows = 20,那么我在另一行上得到20个窗口。我很想知道如何做到这一点。

    1. void DrawGroundFloor(int numOfWindows)

      此功能几乎与drawUpperFloors( )功能相同 除了第一个窗口将被门替换。 因此,如果numOfWindows参数为2,那么底层将包含 1扇门和1扇窗户。 如果窗口数仅为1,则只绘制一扇门。

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

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

      一个有5个窗户的底层的例子是:

    2. +-----------------------+ | | | === === === === === | | | | | | | | | | | | | | | | === === === === | | | | | *************************

      考虑到我无法完成第二项功能,这并不奇怪。

      我尝试使用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("===");
          }
      

      }

1 个答案:

答案 0 :(得分:0)

  

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

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

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, "=== ");
}