This is my code for pset1 mario problem. It works but it looks really messy and inefficient. I think I could use less variables and use the while loops better but I'm not sure where to begin. I'd be happy if someone could point out where and why my code is inefficient so I can fix it
#include <stdio.h>
#include <cs50.h>
int main(void)
{
int pyramidHeight;
printf("How tall is the pyramid?: ");
pyramidHeight = GetInt();
while(pyramidHeight <= 0 || pyramidHeight > 23)
{
printf("Please enter a number between 1 and 23: ");
pyramidHeight = GetInt();
}
int spaces = pyramidHeight - 1; //amount of spaces(should end up at 0)
int spacesHolder = pyramidHeight -1; //place holder for holding spaces
int hashes = 2; //how many hashes to print
int hashesHolder = 2; //counts how many hashes we're supposed to print next
int finalHashes = pyramidHeight + 2; //number of hashes it should end up at (It should be pyramidHeight + 1 but when I put 1 it ends too early)
while((hashes != finalHashes)) //run this while final amount of hashes has not been printed
{
while(spaces != 0)
{
printf(" ");
spaces--;
}
spacesHolder--; //print -1 space next line
spaces = spacesHolder;
while((hashes != 0))
{
printf("#");
hashes--;
}
hashesHolder++; //print +1 hash next line
hashes = hashesHolder;
printf("\n"); //move to next line
}
}
EDIT: UPDATED CODE BELOW
#include <stdio.h>
#include <cs50.h>
int main(void)
{
printf("How tall is the pyramid?: ");
int pyramidHeight = GetInt(); //get height of pyramid from user
while(pyramidHeight <= 0 || pyramidHeight > 23) //if the user inputs a number less than or equal to 0 or greater than 23, prompt for a number again
{
printf("Please enter a number between 1 and 23: ");
pyramidHeight = GetInt();
}
int space = pyramidHeight - 1; //initial amount of spaces to print
int hash = 2; //initial amount of hashes to print
for(int currentHeight = 0; currentHeight != pyramidHeight; currentHeight++) //while current pyramid height is less than final height
{
for(int spaceCurrent = space; spaceCurrent != 0; spaceCurrent--) //spaceCurrent = number of spaces currently being printed
{
printf(" ");
}
space--; //print one less space next time
for(int hashCurrent = 0; hash != hashCurrent; hashCurrent++) //hashCurrent = number of hashes currently being printed
{
printf("#");
}
hash++; //print one more hash next time
printf("\n"); // move to next line
}
}