fscanf() oder fgets()



  • Hallo,

    ich frage mich gerade für welche Anwendungen fscanf bzw. fgets jeweils besser sind. Was ist der jeweilige Vorteil / Nachteil?!



  • naja also auch wenns nur ein teilaspekt ist, so sollte die performance bei fgets besser sein da kein format string geparst werden muß. allerdings wirst dich mit fgets schon schwer tun sowas wie "123123 asdasd 121212 asdasd" zu parsen, sollten die sachen komplexer werden kommst um regex fast nicht rum allerdings ist das meist ein fall für ne lib. also einfach gesagt hast für jedes problem dein wässerchen 😉

    lg lolo



  • hmm, also wenn ich beispielsweise einfach nur eine Eingabe auf ihre Korrektheit (Datentypen etc.) prüfen will, nehm ich fgets?!

    was ist dann der Vorteil von fscanf, bzw. in welcher Andwendung wird fscanf verwendet und vor allem warum?!

    EDIT:

    fscanf liest doch nur bis zum ersten space ein, das spricht ja wieder für mein fgets bei z.B. oben genannter Anwendung...



  • Mit fscanf kannst du formatiert einlesen. Also nicht nur Zeichenketten, sondern auch Ganzzahlen, Fließkommazahlen,...



  • sprich mit fgets wird alles stupide in char konvertiert, mit fscanf kann ich sagen, lies mir ein double / float / sonstwas ein und schreib es mir in den Stream, ich brauche das nicht "zurückcasten" und hab somit auch nicht die Gefahr von Informationsverlusten?!



  • Casten kannst du das sowieso nicht, sondern konvertieren. Und so sparst du dir eben die Mühe.



  • chmbw schrieb:

    sprich mit fgets wird alles stupide char konvertiert, mit fscanf kann ich sagen, lies mir ein double / float / sonstwas ein und schreib es mir in den Stream, ich brauche das nicht "zurückcasten" und hab somit auch nicht die Gefahr von Informationsverlusten?!

    Die Gefahr besteht. Nehmen wir z.B. an, du willst die Zahl 99999999999999999999999999999999999999 in einen unsigned long einlesen. Diese Zahl passt nicht in einen unsigned long rein. Ähnliche Beispiele lassen sich auch für den Datentyp long long, double, etc. finden. Zum Einlesen kannst du dann also scanf und co. vergessen, weil das zum Informationsverlust führt. Dieses Beispiel mag etwas praxisfern sein, da du aber (in einem anderen Thread von dir), vom Einlesen 'beliebig' langer Zahlen schreibst, möchte ich es hier mal erwähnt haben.


Anmelden zum Antworten