c – Por que meu código entra em loop?

Coloquei o código em debug e ele mostra que não chega nem a ler o primeiro scanf, pula e entra em loop justamente por não usar um valor que deveria ser lido e sim provavelmente um lixo de memória. Porém não encontrei forma de evitar isso, sendo que é logo o primeiro valor lido e único requerido para esse exercicio. Também queria saber uma forma de otimizar essa código. O exercício é sobre quantas cédulas de cada valor são necessárias para formar o valor total informado pelo usuário.

#include <stdio.h>

int main()
{
    int x;
    scanf("%d", &x);
    while(x != 0)
    {
        int i;
            if(x >= 100)
            {
                while(x < 100)
                {
                    i++;
                    x = x - 100;
                }
                printf("%d notas de R$ 100,00", i);    
            }    
            if(x >= 50)
            {
                while(x < 50)
                {
                    i++;
                    x = x - 50;
                }
                printf("%d notas de R$ 50,00", i);
            }    
            if(x >= 20)
            {
                while(x < 20)
                {
                    i++;
                    x = x - 20;
                }
                printf("%d notas de R$ 20,00", i);
            }    
            if(x >= 10)
            {
                while(x < 10)
                {
                    i++;
                    x = x - 10;
                }
                printf("%d notas de R$ 10,00", i);
            }    
            if(x >= 5)
            {
                while(x < 5)
                {
                    i++;
                    x = x - 5;
                }
                printf("%d notas de R$ 5,00", i);
            }    
            if(x >= 2)
            {
                while(x < 2)
                {
                    i++;
                    x = x - 2;
                }
                printf("%d notas de R$ 2,00", i);
            }    
            if(x >= 1)
            {
                while(x < 1)
                {
                    i++;
                    x = x - 1;
                }
                printf("%d notas de R$ 1,00", i);
            }    
 
    }
    printf("n");
    return 0;
}