Как сделать так, чтобы char # повторялся так, чтобы он показывал данную цифру в c? - PullRequest
1 голос
/ 26 апреля 2020

Я хочу создать программу для упражнения в курсе CS50, которая просит пользователя ввести высоту фигуры, а затем создает фигуру, аналогичную:

       #
      ##
     ###
    ####
   #####
  ######
 #######
########

с учетом введенных пользователем данных. высота 8.

У меня есть код:

#include <stdio.h>
#include <cs50.h>

int main(void)
{
    int height;

    do
    {
        height = get_int("Enter The Height: ");
    }
    while (!(2 <= height && height<=8));

    for (int row = 1; row <= height; row++)
    {

        for (int column = 1; column <= height; column++)
        {
            printf("#");
        }
        printf("\n");
    }
}

, но он печатает это:

###
###
###

, когда я даю высоту 3.

I Я новичок в языке C и поэтому не понимаю сложных понятий, поэтому я прошу простое объяснение, пожалуйста.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2020

Чем короче, тем лучше.

#include <stdio.h>

int main(void) {
    int height = 5;
    char blocks[height];
    memset(blocks, '#', height);
    for(int i=0; i<height; ++i)
    {
        printf("%*.*s\n", height, i+1, blocks);
    }
    return 0;
}
2 голосов
/ 26 апреля 2020

Вот и вы.

#include <stdio.h>

int main(void) 
{
    const char c = '#';

    while ( 1 )
    {
        printf( "Enter The Height (0 - exit): " );

        int n;

        if ( scanf( "%d", &n ) != 1 || n <= 0 ) break;

        putchar( '\n' );

        for ( int i = 0; i < n; i++ )
        {
            printf( "%*c", n - i, c );
            for ( int j = 0; j < i; j++ ) putchar( c );
            putchar( '\n' );
        }

        putchar( '\n' );
    }

    return 0;
}

Вывод программы может выглядеть следующим образом:

Enter The Height (0 - exit): 10

         #
        ##
       ###
      ####
     #####
    ######
   #######
  ########
 #########
##########

Enter The Height (0 - exit): 9

        #
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########

Enter The Height (0 - exit): 8

       #
      ##
     ###
    ####
   #####
  ######
 #######
########

Enter The Height (0 - exit): 7

      #
     ##
    ###
   ####
  #####
 ######
#######

Enter The Height (0 - exit): 6

     #
    ##
   ###
  ####
 #####
######

Enter The Height (0 - exit): 5

    #
   ##
  ###
 ####
#####

Enter The Height (0 - exit): 4

   #
  ##
 ###
####

Enter The Height (0 - exit): 3

  #
 ##
###

Enter The Height (0 - exit): 2

 #
##

Enter The Height (0 - exit): 1

#

Enter The Height (0 - exit): 0

Что касается вашего кода, то вы всегда выводите одно и то же число символа '#' с без отступов.

    for (int column = 1; column <= height; column++)
    {
        printf("#");
    }

Вы можете изменить свои циклы следующим образом

    for (int row = 1; row <= height; row++)
    {

        for (int column = 1; column <= height; column++)
        {
            putchar( column < height - row + 1 ? c2 : c1 );
        }
        printf("\n");
    }

, где c1 равно '#', а c2 равно ' '.

Вот еще одна демонстрационная программа

#include <stdio.h>

int main(void) 
{
    const char c1 = '#', c2 = ' ';

    while ( 1 )
    {
        printf( "Enter The Height (0 - exit): " );

        int height;

        if ( scanf( "%d", &height ) != 1 || height <= 0 ) break;

        putchar( '\n' );

        for (int row = 1; row <= height; row++)
        {

            for (int column = 1; column <= height; column++)
            {
                putchar( column < height - row + 1 ? c2 : c1 );
            }
            printf("\n");
        }

        putchar( '\n' );
    }

    return 0;
}

Ее вывод может выглядеть как

Enter The Height (0 - exit): 9

       #
      ##
     ###
    ####
   #####
  ######
 #######
########

Enter The Height (0 - exit): 0
...