Voglio sapere qual è la differenza tra fgets()
e scanf()
. Sto usando C come mia piattaforma.Differenza tra scanf() e fgets()
risposta
Scanf non esegue il controllo dei limiti. Fgets sarà probabilmente la scelta migliore. È quindi possibile utilizzare sscanf() per valutarlo.
buona discussione del tema qui- http://cboard.cprogramming.com/c-programming/109243-scanf-vs-fgets.html
How do you allow spaces to be entered using scanf? (che era il mio gemello cattivo sempre insegnato per dimenticare questo- non io)
scanf analizza una stringa si legge nel (o creato), e Fgets legge una riga da un FILE aperto *. O intendi fscanf?
puoi leggere dallo standard input (console) con fgets. –
Ci sono molte differenze. Due quelli cruciali sono:
fgets()
può leggere da qualsiasi file aperto, mascanf()
legge solo standard input.fgets()
legge 'una riga di testo' da un file;scanf()
può essere utilizzato per questo, ma gestisce anche le conversioni da stringa a tipi numerici incorporati.
Molte persone useranno fgets()
per leggere una riga di dati e quindi utilizzare sscanf()
per sezionarlo.
int scanf(const char * restrict format, ...);
scanf (3) cercati certo modello definito dal formato argomento sull'ingresso proposta nota come stdin, dove il modello è definito da te. L'input dato a scanf (3), a seconda della sua variante (scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf), potrebbe essere una stringa o un file.
char *fgets(char * restrict str, int size, FILE * restrict stream);
fgets (3) legge semplicemente una linea dal file di input flusso e copiare i byte stringa terminazione nullo al buffer str e limitano l'uscita al buffer a determinate byte in dimensioni.
La differenza principale risiede nel fatto che scanf
non ha limiti sul numero di caratteri che possono essere letti (nel suo utilizzo predefinito), mentre fgets
ha un numero massimo di char che può essere letto.
Vedi il prototipo delle due funzioni:
char * fgets (char * dest, int size, FILE * stream);
int scanf (formato const char *, ...);
Si può vedere che il secondo parametro di fgets
impone di leggere al massimo char dimensioni.
Un'altra differenza evidente è il valore di ritorno: fgets
ritorno un puntatore a dest
in caso di successo; scanf
restituisce il numero di elementi di input correttamente abbinati e assegnati. Quindi, la funzione scanf scansioni ingresso secondo formato, e legge input dal flusso di input standard stdin, mentre fgets
legge input da FILE * stream come predefinito.
In conclusione, è possibile utilizzare scanf
per leggere i dati da un FILE e inserirli in una matrice a dimensione fissa (ad esempio) non ha molto senso. Un vantaggio di scanf
è la formattazione dei dati di output: se la funzione legge 12345\n
, l'output è 12345
, mentre i file legge e restituisce fino a \n
(incluso), aggiungendo un \0
alla fine come un terminatore di stringa.
Va notato che scanf
spec modello CONSENTONO limiti larghezza campo:
scanf(" %80s", mybuffer);
Ma, dove printf()
permette la larghezza da passare come variabile (con '*'):
printf("My name is %*s.\n", 20, name);
scanf()
no. (E interpreta il '*' come una bandiera per sopprimere/ignorare il campo del tutto.) Il che significa che si finisce per fare cose come questa:
#define NAMEWIDTH 40
char buffer[ NAMEWIDTH + 4 ];
...
scanf(" %40x", buffer);
e non c'è modo di collegare il campo Larghezza 40 nel scanf()
con la larghezza del buffer 40 nella dichiarazione del buffer.
- 1. Differenza tra diversi formati scanf
- 2. fgets() e fread() - Qual è la differenza?
- 3. Differenza tra char * e char [] in C
- 4. La differenza tra $ * e $ @
- 5. Differenza tra $ # e $ {# @}
- 6. Differenza tra. e #
- 7. MySQL: Differenza tra ",", "e"
- 8. Differenza tra "o" e "||"
- 9. Differenza tra unwrapObservable e()
- 10. Differenza tra oggetto e *?
- 11. Differenza tra "**/* /" e "** /"?
- 12. Differenza tra jquery e $
- 13. CMake: differenza tra $ {} e "$ {}"
- 14. Differenza tra ". +" E ". +?"
- 15. VBA: Differenza tra & e +
- 16. Differenza tra numpy.logical_and e &
- 17. Differenza tra | = e^= css
- 18. Differenza tra `% in%` e `` ==
- 19. Funzione fgets() in C
- 20. Raggiungere EOF con fgets
- 21. Perché la funzione fgets è deprecata?
- 22. Mentre scanf! = EOF o scanf == 1?
- 23. Differenza tra Dizionario e Hashtable
- 24. Differenza tra SCM e SVN
- 25. differenza tra RDLC e SSRS
- 26. Differenza tra REMOTE_HOST e REMOTE_ADDR
- 27. Differenza tra "\ n" e Environment.NewLine
- 28. Differenza tra QSharedPointer e QSharedDataPointer?
- 29. Differenza tra toFixed() e toPrecision()?
- 30. Differenza tra strncpy e memcpy?
Per i tipi numerici, scanf() non deve eseguire il controllo dei limiti. Per i tipi di stringa, puoi dire a scanf() di effettuare il controllo dei confini. –