La tua è una domanda molto interessante e abbastanza rara da incontrare. Infatti, raramente i programmatori, purtroppo sia principianti che professionisti, si interessano al rispetto di un importante requisito non funzionale piuttosto maltrattato: la robustezza del software. Si, si. La qualità di cui parli è la robustezza e non la performance:)
Veniamo al punto. Per eliminare il fastidioso problema di cui parli ci sono vari approcci:
1) invece di usare la scanf con i tipi di dato atteso, la si può usare per leggere sempre una stringa fino a eol, e poi elaborare la stringa per ottenere l'input desiderato. L'utente inserisce il dato usando le funzioni di editing di linea messe a disposizione dal SO.
2)puoi progettare e implementare un tuo editor di linea a prova di bomba leggendo l'input carattere per carattere gestendo quindi i vari caratteri speciali.
3)Oppure puoi usare la libreria readline GNU che trovi qui:
Ciao