Vc pode usar as próprias opções do printf
para formatar a quantidade de espaços e #
:
int height = // ler valor e verificar se está entre 1 e 8
for (int i = 1; i <= height; i++)
printf("%*s%.*s\n", height - i, "", i, "#########");
Saída para height
igual a 8:
#
##
###
####
#####
######
#######
########
Veja aqui o código rodando.
Referência: https://stackoverflow.com/questions/7105890/set-variable-text-column-width-in-printf
E pra ler a altura, nem precisa de uma função pra validar, pode ser apenas:
int height;
do {
printf("height: ");
scanf("%d", &height);
} while (height < 1 || height > 8);
Mas se quiser muito continuar com a função, dá pra simplificar:
int isBtw1And8(int size) {
return size >= 1 && size <= 8;
}
Simplifiquei, pois sempre que vc tem algo como if (algo) return true; else return false;
, pode trocar por return algo;
.
E no main
ficaria:
int height;
do {
printf("height: ");
scanf("%d", &height);
} while (! isBtw1And8(height));
Os códigos acima não validam se o usuário não digitar um número válido (por exemplo, se digitar "xyz"). E tem várias formas diferentes de fazer (veja este link e escolha uma) :-)
Por fim, daria para fazer assim também:
int height = // ler valor entre 1 e 8
for (int i = 1; i <= height; i++) {
for (int j = 0; j < height; j++) {
if (j < height - i) {
printf(" ");
} else {
printf("#");
}
}
printf("\n");
}