Если я скопирую и отформатирую код из вопроса, это будет выглядеть так:
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n = get_int("Height: ");
for (int i = 0; i < n; i++)
{
// s stands for spaces
for (int s = 0; s < n - 1 - i; s++)
{
printf(" ");
// h stands for hashes
for (int h = 0; h < n - s; h++)
printf("#");
printf("\n");
}
}
printf("\n");
}
Структура цикла не соответствует задуманной; цикл h
может обращаться к s
, но не должен этого делать. Цикл i
считает от нуля до (но не включая) введенного числа. Вы хотите напечатать i + 1
хэшей, так что на самом деле нет необходимости обращаться к s
после цикла.
Как я отметил в комментарии, в конце цикла s значение s
будет n - 1 - i
; Вы можете использовать это в предельном выражении следующего цикла: for (int h = 0; h < n - (n - 1 - i); h++)
, но затем вы можете упростить его до for (int h = 0; h < i + 1; h++)
, так что вам действительно не нужно иметь доступ к s
после завершения его цикла.
Вывод этого перемешанного кода цикла для высоты 7 выглядит следующим образом:
Height: 7
#######
######
#####
####
###
##
#######
######
#####
####
###
#######
######
#####
####
#######
######
#####
#######
######
#######
Если вы исправите код таким образом, чтобы цикл h
не находился внутри цикла s
, и зафиксировали ограничение на цикл h
, как обсуждалось, вы получите код, подобный:
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n = get_int("Height: ");
for (int i = 0; i < n; i++)
{
// s stands for spaces
for (int s = 0; s < n - 1 - i; s++)
printf(" ");
// h stands for hashes
for (int h = 0; h < i + 1; h++)
printf("#");
printf("\n");
}
printf("\n");
}
Соответствующий вывод для высоты 7:
Height: 7
#
##
###
####
#####
######
#######
Это похоже на то, что нужно.