So cosa fà il while, non capisco perchè quel while mi itera anche la printf
Qual è il problema? Se tu inserisci "ciao"ti verrà stampato 4 volte ""Errore! Inserisci un numero intero!", se poi dai anche un Invio te lo stamperà una volta ancora.
Eppure non ho messo la printf dentro nessun ciclo!!
La printf() attualmente E' nel ciclo.
Attualmente OGNI carattere che inserisci viene processato; si esce dal ciclo se il carattere inserito è una CIFRA.
Se vuoi che l'utente inserisca un NUMERO potresti fare un'unica lettura con fgets(), verificare con un ciclo sul buffer letto che tutti i caratteri siano cifre e, se sì, trasformare il buffer letto in intero con atoi().