Generalmente, fgets()
è considerato una buona opzione. Legge intere righe in un buffer e da lì puoi fare ciò che ti serve. Se si desidera un comportamento come scanf()
, è possibile passare le stringhe che si leggono su sscanf()
.
Il vantaggio principale di questo, è che se la stringa non riesce a convertire, è facile da recuperare, mentre con scanf()
si è lasciato con ingresso sul stdin
cui è necessario svuotare. Inoltre, non si finisce nel mix di input diretto alla linea con scanf()
, che provoca mal di testa quando cose come stdin
lasciano normalmente ai nuovi programmatori che credono che le chiamate di input siano state ignorate del tutto.
Qualcosa di simile potrebbe essere di vostro gradimento:
char line[256];
int i;
if (fgets(line, sizeof(line), stdin)) {
if (1 == sscanf(line, "%d", &i)) {
/* i can be safely used */
}
}
Sopra si dovrebbe notare che fgets()
rendimenti NULL
su EOF o errori, che è il motivo per cui ho avvolto in un if
. La chiamata sscanf()
restituisce il numero di campi che sono stati convertiti correttamente.
Ricordare che fgets()
potrebbe non leggere un'intera riga se la riga è più grande del buffer, che in un programma "serio" è sicuramente una cosa da considerare.
che molto dipende da ciò che fa il tuo programma di fare. Vi raccomando (quasi in ogni situazione) di usare 'scanf', e controllarne il valore di ritorno. – asaelr
'scanf' è il metodo standard per ottenere input formattati in C, e' fgets'/'fgetc' è la funzione standard consigliata per ottenere intere linee o singoli caratteri. La maggior parte delle altre funzioni sono non standard o specifiche della piattaforma. –
Non c'è motivo per non usare 'getline' in un programma serio. Se la tua piattaforma non ce l'ha, puoi implementarla in termini di 'fgets' e' malloc'. –