Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C (C89, C99 und C11) ::  fscanf() oder fgets()     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
chmbw
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.12.2009
Beiträge: 160
Beitrag 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




Beitrag 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: 160
Beitrag 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




Beitrag 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: 160
Beitrag 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




Beitrag 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




Beitrag 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.
c++.de :: C (C89, C99 und C11) ::  fscanf() oder fgets()   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.