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
        }
        
        
    }