Cómo usar scanf para leer un valor sin saber su tipo

Soy un estudiante principiante. Me pidieron que escribiera un módulo que tradujera la entrada del usuario según la siguiente regla:

  • Si el carácter es una letra, hágalo en mayúsculas.

  • si el carácter es un número, hazlo * en vez

  • Si el carácter es un \, el siguiente carácter no se verá afectado.

El progtwig debe continuar llamando a scanf () para leer los caracteres del usuario hasta que se encuentre EOF. Nota: debe imprimir los caracteres tan pronto como los reciba. No intentes salvarlos.

Ejemplo:

input : Hi Mike your room number is \4\2\3 and the passcode is 312 output: HI MIKE YOUR ROOM NUMBER IS 423 AND THE PASSCODE is *** 

Ahora mi pregunta es: ya que no sabes qué tipo de carácter se ingresará a continuación, ¿cómo puedes guardarlo en un varaible como scanf (“% c”, & func) guarda el carácter en func? Tampoco tengo permiso para usar toupper (), así que, ¿cómo puedo escribir mayúsculas?

Cualquier ayuda es apreciada !! Gracias

Tendrá que tratarlo como una cadena (o caracteres individuales) primero. Luego, puede verificar si algo es un número comparando su código ASCII:

 if(x >= '0' && x <= '9') // digit 

Similar para las otras condiciones.

Debe leer el carácter de entrada por carácter y analizarlo en consecuencia.
Prueba este código:

 #include  void change(); char ch; int main(void){ fprintf(stdout, "Input : "); for(;;){ ch = getchar(); if(ch=='\n') break; else if(ch=='\\') /* no change */ ch = getchar(); else change(); fprintf(stdout, "%c", ch); } return 0; } void change(){ if(ch>=97 && ch<=122) /* small case letters */ ch-=32; else if(ch>=48 && ch <=57) /* numbers */ ch='*'; }