Mi sembra che anche atoi() sia usata male !?
dall'esempio non hai bisogno di convertire i caratteri in numero , lavora direttamente con i caratteri , a mio avviso sarà più semplice


codice:
char cod[1024]; //Forse è una dimensione eccessiva per tre caratteri :)
do{
scanf("%3s",cod);
}while( cod[0]<'1' ||cod[0]>'5'|| cod[2]<'1' || cod[2]>'5' || cod[1]!='#' );
printf("\nFUNZIONA!\n");