validação – Tentando ler o segundo Char mas não consigo – C

Bom estou fazendo uma atividade que eu quero printar o seguinte:

Se inputar 1: return “one”;

Se inputar 2: return “two”;

Se inputar 453: return “five hundred fifty three”;

E assim por diante, entre 1 e 1000.

Enfim, eu fiz do 1-9 utilizando um array chamado onedigit(). Porém, quando tento ler o segundo (cujo tem os numeros de 10 a 19), ele está lendo três numeros abaixo sempre.

#include <stdio.h>

int n;

char* onedigit() = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
char* twodigits() = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};



int main(){

    do{

        printf("ninsert number 1 to 1000: n");
        scanf("n%d", &n);

            if(n<=0 || n>1000){
                printf("ninvalid numbern"); //numbers below 1 or over 1000 aren't allowed
            }else{

                if(n > 0 || n <= 9){

                    printf("%sn", onedigit(n - 1));

                }else if(n >= 10 || n <= 19){
                    printf("%sn", twodigits(n - 10));
                }

            }

        }while(n<=0 || n>1000);
}

Aqui funcionando normal com um numero entre 1-9

Neste aqui eu digito 12, mas nada acontece. Quando digito numeros maiores que 12, ele retorna 3 números abaixo

Exemplo de número inputado acima de 12

Espero ter sido claro, agradeço a atenção de todos.