| Autor |
Nachricht |
chmbw
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.12.2009
Beiträge: 146
|
chmbw Mitglied
19:31:09 06.04.2010 Titel: |
fscanf() oder fgets() |
Zitieren |
Hallo,
ich frage mich gerade für welche Anwendungen fscanf bzw. fgets jeweils besser sind. Was ist der jeweilige Vorteil / Nachteil?! |
|
|
|
 |
noobLolo
Unregistrierter
|
noobLolo Unregistrierter
20:00:54 06.04.2010 Titel: |
|
Zitieren |
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 |
|
|
|
 |
chmbw
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.12.2009
Beiträge: 146
|
chmbw Mitglied
20:05:09 06.04.2010 Titel: |
|
Zitieren |
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... |
Zuletzt bearbeitet von chmbw am 20:07:02 06.04.2010, insgesamt 1-mal bearbeitet |
|
 |
Janjan
Unregistrierter
|
Janjan Unregistrierter
20:08:53 06.04.2010 Titel: |
|
Zitieren |
Mit fscanf kannst du formatiert einlesen. Also nicht nur Zeichenketten, sondern auch Ganzzahlen, Fließkommazahlen,... |
|
|
|
 |
chmbw
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.12.2009
Beiträge: 146
|
chmbw Mitglied
20:16:57 06.04.2010 Titel: |
|
Zitieren |
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?! |
Zuletzt bearbeitet von chmbw am 20:17:34 06.04.2010, insgesamt 1-mal bearbeitet |
|
 |
Janjan
Unregistrierter
|
Janjan Unregistrierter
20:42:05 06.04.2010 Titel: |
|
Zitieren |
Casten kannst du das sowieso nicht, sondern konvertieren. Und so sparst du dir eben die Mühe. |
|
|
|
 |
Big Brother
Unregistrierter
|
Big Brother Unregistrierter
20:53:42 06.04.2010 Titel: |
|
Zitieren |
| 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. |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|