cavolo, qua si rispolvera il vecchiume

Da quel che ricordo, con la fgets() leggi tanti caratteri quanti sono specificati nel buffer che setti, esempio:

char s[80];
while(fgets(s, sizeof(s), fp) != NULL); // legge 80 caratteri da file alla volta sino a NULL cioè tutto il file

Per la seconda domanda se mi ritrovassi con un input ignoto e misto fatto caratteri numeri credo che userei uno switch case