Почему в этом кодексе производится 6 знаков? - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть проблема, которая требует объяснения.

Когда я запускаю приведенный ниже код, меня попросят 3 значения: высота, ширина и ширина два. Если я введу 1 для высоты, 2 для ширины и 2 для ширины, два, 6 # отметок получаются только на одной строке, как это "######" - без кавычек, очевидно. Я не понимаю, почему 6 производятся. Я ожидаю, что 4 # марки будут продуктом. Пожалуйста, помогите!

После запуска с вышеупомянутыми значениями продуктом будет ######.

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

int main(void)
{
    int height = get_int("Height of Pyramid?");
    int width = get_int("Length of Width?");
    int widthtwo = get_int("Length of Widthtwo?");
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {   
            for (int a = 0; a < widthtwo; a++)
            {
                printf("#");
            }

            printf("#");
        }
        printf("\n");
    }
}

Ответы [ 2 ]

1 голос
/ 11 декабря 2019

Удалить 2-й printf ("#");линия. Это добавляет два дополнительных #, так как он вызывается каждый раз в цикле j.

for (int i = 0; i < height; i++)
{
    for (int j = 0; j < width; j++)
    {   
        for (int a = 0; a < widthtwo; a++)
        {
            printf("#");   // Executed 1*2*2 times 
        }

        printf("#");       // Executed 1*2 times - Remove this line
    }
    printf("\n");
}

Это может помочь вам визуализировать это:

i j a
0 0 0 #
0 0 1 ##
0 0 1 ### (last # is from 2nd printf)
0 1 0 ####
0 1 1 #####
0 1 1 ###### (last # is from 2nd print)
0 голосов
/ 11 декабря 2019

Внешний цикл запускается один раз - только когда i = 0. Поэтому весь другой код, заключенный в блок (и внутри этого цикла), будет выполняться один раз.

Внутренний цикл 'j' будет выполняться дважды ввсего, когда j = 0 и когда j = 1. Каждый раз, когда он запускается, внутренний цикл «a» запускается дважды, и он печатает «#» каждый раз. Это будет напечатано (2 x 2) 4 '#.

Но после того, как цикл 'a' был выполнен дважды, каждый раз, когда программа будет выполнять строку printf ("#"), которая находится внутри цикла 'j' и которая запускается после цикла 'a'. Таким образом, один раз за каждый цикл j повторяется, т. Е. Дважды, и это означает еще 2 x '#'.

...