Originariamente inviato da m3t4lup
ma fgets non è per i files?
fgets, in generale, legge da uno "stream". Se poi lo stream lo hai aperto con fopen() o hai usato lo stream predefinito standard "stdin", questo non importa alla fgets.

Originariamente inviato da m3t4lup
e non vorrei utilizzare malloc e ralloc perchè ancora non ha spiegato i puntatori(anche se li saprei usare )
Peccato...

Originariamente inviato da m3t4lup
si ho usato una scanf all'interno del programma
È il solito stranoto problema della scanf. Perché legge caratteri finché essi corrispondono allo specificato di formato ma al primo carattere che non corrisponde più, scanf si ferma e termina l'input ma quel carattere rimane nel buffer.

scanf ("%d", &val);

Con %d accetta cifre decimali ma il newline non è compreso tra questi. Appena trova il newline (perché hai premuto INVIO), la scanf termina, ma il newline rimane nel buffer. Immagina cosa succede se subito dopo usi getchar....