Problem mit fscanf
-
Hallo,
ich habe ein Problem mit fscanf.
Was ich machen will:
Ich habe in einer Datei Zahlen stehen:8
25
47
16
25
39
5Möchte diese einlesen und in einer anderen Datei wieder in folgendem Format abspeichern:
Amount| ratio of days
------+---------------
5 | 0.143
8 | 0.288
16 | 0.429
25 | 0.714
39 | 0.857
47 | 1.000Jedoch scheitere ich beim einlesen der Zahlen. Mein Code:
#include <stdio.h> #include <stdlib.h> #include <sys/time.h> int main() { FILE* input; input = fopen("ergebnis_gew","r"); int n; fscanf (input,"%d",&n); printf("Halllo %i",n); }
Wenn ich das Programm ausführe, bekomme ich einen Segmentation fault - ich verstehe jedoch nicht warum. Die Benutzung von mir ist doch genauso, wie in http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/ beschrieben?
Kann mir wer da weiterhelfen?
-
Dann schau da nochmal bei fopen nach, wie man das benutzt.
Vor allem wie man sicher gehen kann, dass die Datei auch geöffnet wurde.Und das schließen der Datei nicht vergessen.
-
Frag mit input != NULL ab, ob die Datei überhaupt geöffnet ist und gibt mit perror() dann evtl. die entsprechende Fehlermeldung aus.
L. G.
Steffo
-
Hallo,
also bei mir kompiliert das Programm ohne Warnungen und Fehler.
(OpenBSD Compiler: gcc).
Allerdings bekommst du nur den ersten Wert ausgegeben.
Um alle Werte zu bekommen, bräuchtest du ein Array und eine Schleife.Wenn du bei fopen() den Pfad nicht angibst, muss die Datei im aktuellen Verzeichnis liegen.
Grüße
-
gigg schrieb:
also bei mir kompiliert das Programm ohne Warnungen und Fehler.
(OpenBSD Compiler: gcc).Suggeriere ihm bitte nicht, dass sein Code ok wäre, das ist er nämlich nicht. Weshalb, wurde hier schon erörtert.
-
Steffo schrieb:
gigg schrieb:
also bei mir kompiliert das Programm ohne Warnungen und Fehler.
(OpenBSD Compiler: gcc).Suggeriere ihm bitte nicht, dass sein Code ok wäre, das ist er nämlich nicht. Weshalb, wurde hier schon erörtert.
Sorry, das wollte ich nicht. Der Code ist nicht ok.
Es wurde ja bereits auf die Schwachstellen hingewiesen.
Aber er kompiliert bei mir ohne Segmentation fault.
-
gigg schrieb:
Aber er kompiliert bei mir ohne Segmentation fault.
wo sollte auch beim kompilieren ein segmentation fault entstehen?
-
vario-500 schrieb:
gigg schrieb:
Aber er kompiliert bei mir ohne Segmentation fault.
wo sollte auch beim kompilieren ein segmentation fault entstehen?
Das musst du den Threadstarter fragen.
Das war die Ausgangsfrage.
-
vario-500 schrieb:
gigg schrieb:
Aber er kompiliert bei mir ohne Segmentation fault.
wo sollte auch beim kompilieren ein segmentation fault entstehen?
Ganz einfach: Wenn der Pfad nicht stimmt oder die Datei nicht existiert, dann zeigt input auf NULL und wenn man NULL-Pointer dereferenziert...
Da bringt das Einschalten der Warnings auch nichts.
-
gigg schrieb:
Aber er kompiliert bei mir ohne Segmentation fault.
Das Problem ist ja nicht das Kompilieren, sondern das Ausführen.
-
Steffo schrieb:
Das Problem ist ja nicht das Kompilieren, sondern das Ausführen.
Ja, mein Fehler. Ich meinte die Ausführung (ohne segfault).
-
FILE* input; input = fopen("ergebnis_gew","r"); //fehler meldung if (input== NULL) { printf("Daten kann nicht geoeffnet werden\n");//du hast das vergessen return(0); } int n; fscanf (input,"%d",&n); /*"%d" integer zahl "%i" auch integer zahl aber man benutzt nicht die beide in selben Programm*/ printf("Halllo %i",n);
Das, das du geschrieben hast, funktioniert
aber man braucht eine FOR_SCHLEIFE, um alle Zahlen aus Datei einzulesen
und Natürlich muss die Zahlen in einem Array reingepackt werden.