Как удалить дополнительный символ на пирамиде (программа CS50 Mario), сформированный этим кодом, чтобы выровнять по правому краю? - PullRequest
0 голосов
/ 29 февраля 2020

Я сейчас прохожу курс CS50. При самом первом назначении мне нужно создать пирамиду в C, используя хэши (#), которые позволяют пользователю решить, какой высоты должна быть пирамида, сначала предложив им положительное целое число, скажем, от 1 до 8 Ожидаемый вывод и вывод, который я получаю следующим образом; [https://i.stack.imgur.com/0Qkg5.png] . Мне как-то удалось добавить один пробел в каждой строке, кто-нибудь есть идеи, как это исправить?

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

int main(void)
{
    int n;

    do 
    {
        n = get_int("Enter the height: ");
    }
    while (n<1 || n>8);

    for (int i = 1; i<=n; i++ )
    {
        for(int spaces = (n-i); spaces>=0 ;spaces--)
        {
            printf(" ");
        }
        for(int dashes = 1; dashes<=i ; dashes++)
        {
            printf("#");
        }

            printf("\n");
    }

}

1 Ответ

1 голос
/ 29 февраля 2020

Рассмотрим случай, когда n == i, что происходит в последнем ряду пирамиды. Как вы и написали для -l oop, он все равно будет запускаться один раз, потому что spaces обнуляется. Но в последнем ряду вам не нужны пробелы, поскольку l oop не должен запускаться ни разу. Исправление простое: измените spaces >= 0 на spaces > 0. Таким образом, l oop запускается ровно spaces раз (что может быть равно нулю), а не spaces+1 раз, как сейчас.

...