Ich möchte wissen, was der Unterschied zwischen fgets()
und scanf()
ist. Ich benutze C als meine Plattform.Unterschied zwischen scanf() und fgets()
Antwort
Scanf führt keine Überprüfung der Grenzen durch. Fgets wird wahrscheinlich die bessere Wahl sein. Sie können dann sscanf() verwenden, um es auszuwerten.
gute Diskussion des Themas hier- http://cboard.cprogramming.com/c-programming/109243-scanf-vs-fgets.html
Scanf analysiert eine Zeichenfolge, die Sie in gelesen (oder erstellt) (das war mein böser Zwilling this- mich nicht zu vergessen, referiert zu werden), und fgets liest eine Zeile aus einer geöffneten FILE *. Oder meinst du fscanf?
können Sie von der Standardeingabe (Konsole) mit fgets lesen. –
Es gibt mehrere Unterschiede. Zwei entscheidende sind:
fgets()
aus jeder offenen Datei lesen können, aberscanf()
liest nur die Standardeingabe.fgets()
liest 'eine Zeile Text' aus einer Datei;scanf()
kann dafür verwendet werden, aber auch Konvertierungen von String in eingebaute numerische Typen werden behandelt.
Viele Menschen werden fgets()
verwenden, um eine Zeile von Daten zu lesen und dann sscanf()
es sezieren zu verwenden.
int scanf(const char * restrict format, ...);
scanf (3) sucht nach bestimmten Muster durch das Argument Format definiert auf der gegebenen Eingabe bekannt als stdin, wo das Muster von Ihnen festgelegt wird. Die angegebene Eingabe für scanf (3) kann je nach Variante (scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf) eine Zeichenfolge oder eine Datei sein.
char *fgets(char * restrict str, int size, FILE * restrict stream);
fgets (3) liest nur eine Linie aus der Eingabedatei Strom und der Bytes als null Abschluß Zeichenfolge an den Puffer str und begrenzen die Ausgabe an die Puffer zu gegebener Byte kopieren in Größe.
Der Hauptunterschied liegt in der Tatsache, dass scanf
keine Grenzen für die Anzahl von Zeichen haben, die (in dem Standardgebrauch) gelesen werden kann, während fgets
eine maximale Anzahl von Zeichen hat, die gelesen werden kann.
Siehe den Prototyp der beiden Funktionen:
char * fgets (char * dest, int size, FILE * stream);
int scanf (const char * -Format, ...);
Sie können sehen, dass der zweite Parameter von fgets
auferlegt, um maximal char zu lesen.
Ein weiterer deutlicher Unterschied ist der Rückgabewert: fgets
Rückkehr ein Zeiger auf dest
auf Erfolg; scanf
geben Sie die Anzahl der übereinstimmend zugewiesenen und zugewiesenen Eingabeelemente zurück. Dann wird die Scanf Funktion tastet Eingang nach Format und liest eine Eingabe von dem Standard-Eingabestrom stdin, während einer Eingabe von fgets
FILE * stream als Default ausliest.
Zusammenfassend können Sie scanf
verwenden, um Daten aus einer Datei zu lesen und sie in ein Array fester Größe (zum Beispiel) einfügen, hat nicht viel Sinn. Ein Vorteil von scanf
ist die Formatierung der Ausgabedaten: Wenn die Funktion 12345\n
liest, ist die Ausgabe 12345
, während das fgets liest und zurückgibt, bis \n
(enthalten), ein \0
am Ende als Zeichenfolge Terminator hinzufügen.
Es sollte beachtet werden, dass scanf
Muster Spezifikationen Feldbreite Grenzen erlauben:
scanf(" %80s", mybuffer);
Aber wo printf()
die Breite als Variable übergeben werden können (mit '*'):
printf("My name is %*s.\n", 20, name);
scanf()
nicht. (Er interpretiert die ‚*‘ als Flag zu unterdrücken/ignorieren das Feld ganz.) Das bedeutet, Sie Dinge wie diese am Ende tun:
#define NAMEWIDTH 40
char buffer[ NAMEWIDTH + 4 ];
...
scanf(" %40x", buffer);
und keine Möglichkeit, das Feld 40 zu verbinden Breite im scanf()
mit der Pufferbreite 40 in der Pufferdeklaration.
- 1. Unterschied zwischen verschiedenen ScanF-Formaten
- 2. fgets() und fread() - Was ist der Unterschied?
- 3. C - scanf() vs gets() vs fgets()
- 4. Was ist der Unterschied zwischen "% [^ \ n]" und "% s" für scanf?
- 5. Differenz zwischen scanf ("% c", & c) und scanf ("% c", & c)
- 6. __isoc99_scanf und scanf
- 7. Scanf Funktion zwischen C++ und Assembler
- 8. Unterschied btw wird, scanf ('% s'), getline
- 9. fgets und sscanf
- 10. c Programmierung: (scanf und gets)
- 11. Unterschied zwischen Vorzeichen & und *?
- 12. VBA: Unterschied zwischen & und +
- 13. Unterschied zwischen "**/* /" und "** /"?
- 14. Unterschied zwischen $ # und $ {# @}
- 15. Unterschied zwischen = und: =
- 16. Unterschied zwischen '#', '%' und '$'
- 17. MySQL: Unterschied zwischen ', `,' und '
- 18. C++ Unterschied zwischen '//' und '///'
- 19. Unterschied zwischen String.Empty und ""
- 20. Unterschied zwischen `% in%` und `==`
- 21. Unterschied zwischen numpy.logical_and und &
- 22. Unterschied zwischen. und #
- 23. Unterschied zwischen // und http: //
- 24. Unterschied zwischen char * und char [] in C
- 25. Probleme mit printf() und fgets()
- 26. C - scanf() und dann getenv()
- 27. Scanf und zwei Strings
- 28. Unterschied zwischen -Wconversion zwischen gcc und g ++
- 29. Probleme bei der Verwendung von fgets und strcat
- 30. Unterschied zwischen Wörterbuch und Hashtable
Bei numerischen Typen muss scanf() keine Grenzen setzen. Bei Zeichenkettentypen können Sie scanf() angeben, um die Grenzprüfung durchzuführen. –