Mai usare la scanf, che ti sporca il buffer di input.
Tutto l' input dell' utente viene messo in un' area di memoria e poi viene letto.Se l' utente digita caratteri che non vengono letti, questi rimangono nel buffer e vengono letti durante la successiva funzione di input, inquinando così il risultato.
gets() non sporca il buffer perché legge tutti i caratteri, però ha il problema che non fa alcun controllo sulla quantità di caratteri letti, il che può causare un segmentation fault.

In definitiva: usa solo la fgets (tieni conto del fatto che legge anche il carattere '\n'), e se vuoi leggere degli interi converti la stringa in int con atoi.

Esempio:

codice:
char buffer[100];
int num;
puts("Digita un numero : ");
fgets(buffer,100,stdin);
num=atoi(buffer);