ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
637
637
EMPFEHLEN
-
Ich hab ein Problem und weiß nicht so recht wie ich den Fehler beseitigen soll.
Ich lese in diesem Programm eine Datei aus (unter anderem), doch seid ich diesen Teil fertig geschrieben habe und es daran geht die Datei auszulesen, schmiert mir das Programm immer ab.
Vielleicht kann einer von euch einen Fehler entdecken. Vielleicht benutze ich aber auch das Auslesen der Dateil vollkommen falsch.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
#include <stdio.h> int main() { float kurs,euro,anzUmtausch=1.0,kleinstEuro,groesstEuro,mittEuro=0.0,euroK,murK; int mur; printf("Bitte geben sie einen Geldbetrag in Mauritius-Rupie ein: \n"); scanf("%d",&mur); FILE *fp; fp = fopen ("wechselkurs.dat", "r"); fscanf(fp, "%f", &kurs ); fclose ( fp ); euro = kurs*mur; printf("Der Kurs in Euro beträgt %f",euro); fp = fopen ("mur2eur.dat", "a"); fprintf(fp, "%d \t %f \n", mur, euro); fclose ( fp ); fp = fopen ("mur2eur.dat", "r"); fscanf(fp,"%d \t %f",euroK,murK); kleinstEuro = euroK = groesstEuro; while(!feof(fp)){ fscanf(fp,"%d \t %f",euroK,murK); kleinstEuro = (kleinstEuro > euroK) ? euroK: kleinstEuro; groesstEuro = (groesstEuro < euroK) ? euroK: groesstEuro; anzUmtausch++; mittEuro = mittEuro + euroK; } mittEuro = mittEuro / anzUmtausch; fclose ( fp ); printf("%f /f /f /f",kleinstEuro,groesstEuro,anzUmtausch,mittEuro); return (0); }Sebastian Schütze
Offizieller
Microsoft Junior Student Partner
und Microsoft Partner
Humboldt Universität zu Berlin
Email: sebastian.schuetze@studentpartners.de
Website der MSP: www.studentpartners.de
Webdesign: Razorstudio
Website: www.razorstudio.de
Email: Sebastian.Schuetze@razorstudio.de
-
Hallo!
jedes fopen kann fehlschlagen daher immer prüfen ob auch ein gültiger Zeiger zurückgegeben wurde. (z.B.: die Datei existiert nicht... etc...)
Code :1 2 3 4 5 6 7 8 9 10
if(!(fp = fopen ("wechselkurs.dat", "r"))) { perror("FEHLER: lesen von wechselkurs.dat"); //Lesefehler hier behandeln } else fscanf(fp, "%f", &kurs ); if(fp) fclose ( fp );
außerdem wäre es nett den Inhalt der wechselkurs.dat zu posten (am besten als Attachment)
lg
Johannes
-
29.09.05 14:20 #3
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Du solltest immer erstmal prüfen, ob die Datei auch geöffnet werden konnte bevor du versuchst von der Datei zu lesen oder in die Datei zu schreiben:
Code :1 2 3 4 5 6 7 8 9 10 11 12
FILE* fp; if ((fp = fopen ("test.dat", "r")) != NULL) { // Datei wurde zum Lesen geöffnet ... fclose (fp); } else { // ups, Datei existiert nicht oder konnte // wegen den Zugriffsrechten nicht zum // lesen geöffnet werden. ... }
Dann solltest du natürlich auch immer kontrollieren ob überhaupt sinnvolle Werte von der Datei eingelesen werden konnten:Code :1 2 3 4 5 6 7 8 9 10 11 12 13
if (fscanf (fp, "%f", &kurs ) == 1) { // fscanf gibt die Anzahl der erfolgreich // eingelesenen und zugewiesenen Elemente zurück. // wenn du 1 Element in eine Variable einlesen // willst, dann gibt die Funktion eben 1 // zurück wenn das geklappt hat. ... } else { // ups, evtl. sind wir schon am Ende der Datei, // (EOF) angekommen (Datei ist leer?) oder in // der Datei stand keine Gleitkommazahl. ... }
Wenn du eine Datei mit dem Modus "a" öffnest muß die Datei bereits existieren! Verwende "a+" wenn du möchtest das die Datei angelegt wird wenn sie noch nicht existiert.
Siehe die Dokumentation für die Funktionen fscanf und fopen
Übrigens, die solltest auch auf Fehler bei den Stream prüfen, anstatt nur auf EOF:
Code :1 2 3 4 5 6 7 8 9 10 11
while (!feof (fp)) { if (fscanf (fp, ""%d \t %f",euroK,murK) == 2) { // euroK und murK konnten eingelesen werden! } if (ferror (fp)) { // irgendwas stimmt mit dem stream nicht! fputs("File error", stderr); break; } }If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
okay mach ich mit diesem post dann!
Aber ich glaube nicht dass es am öffnen der Dateil liegt, denn er kann ja die wechselkurs.dat öffnen nur stürzt das programm erst beim auslesen der mur2eur.dat ab.
Ich hänge mal beide Dateien ran.
EDIT: kleiner Nachtrag, das Programm stürzt ab an der stelle dieses Codefragments (dick markiertes):
fp = fopen ("mur2eur.dat", "r");
fscanf(fp,"%d \t %f ",euroK,murK);
kleinstEuro = euroK = groesstEuro;Geändert von Razorhawk (29.09.05 um 14:41 Uhr)
Sebastian Schütze
Offizieller
Microsoft Junior Student Partner
und Microsoft Partner
Humboldt Universität zu Berlin
Email: sebastian.schuetze@studentpartners.de
Website der MSP: www.studentpartners.de
Webdesign: Razorstudio
Website: www.razorstudio.de
Email: Sebastian.Schuetze@razorstudio.de
-
29.09.05 14:28 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Existiert denn die Datei mur2eur.dat schon?
/edit: Ok. Vergiss die Frage...Geändert von deepthroat (29.09.05 um 14:33 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
29.09.05 14:38 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Ja, liegt nicht daran das das Öffnen nicht kontrollierst.
Aber in dem fscanf-Aufruf mußt du die Adressen der Variablen angeben wenn das selbst keine Pointer sind.
Code :1 2 3
if (fscanf(fp,"%d \t %f", &euroK, &murK) == 2) { // ... }If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Schon die Antworten da... geht ja schnell.
Ja genau hast recht, das könnts sein.
Daran muss ich mich erst gewöhnen in C mit den Pointer und den Adressen und dem eigentlichen Inhalt der Variablen
EDIT: Da fällt mir ein, wieso kann man Pointer ohne dies & davor reinschreiben, aber normale Variablen nicht?Geändert von Razorhawk (29.09.05 um 14:46 Uhr)
Sebastian Schütze
Offizieller
Microsoft Junior Student Partner
und Microsoft Partner
Humboldt Universität zu Berlin
Email: sebastian.schuetze@studentpartners.de
Website der MSP: www.studentpartners.de
Webdesign: Razorstudio
Website: www.razorstudio.de
Email: Sebastian.Schuetze@razorstudio.de
-
Weil das & einen Pointer auf die Variable erzeugt. Und bei einem Pointer is der Pointer ja schon da...
lg
Johannes
-
30.09.05 08:24 #9jsendrow Tutorials.de Gastzugang
Zitat von Razorhawk
%f erwarted einen Zeiger auf eine double-variable, Du gibts aber nur eine float rein. Damit überschreibt das Programm Speicher, was zu Abtürzen führen kann.
Ähnliche Themen
-
Programm stürzt beim Füllen von Vektoren mit vielen Werten ab
Von XELLEX im Forum C/C++Antworten: 9Letzter Beitrag: 19.06.10, 12:02 -
Programm stürzt ab (System.AccessViolationException:)
Von themonk im Forum C/C++Antworten: 6Letzter Beitrag: 24.09.09, 17:08 -
Programm stürzt ab
Von Blaze241 im Forum JavaAntworten: 4Letzter Beitrag: 02.07.09, 15:14 -
C Cleint Programm stürzt ohne Fehlermeldung ab
Von lolilol im Forum C/C++Antworten: 4Letzter Beitrag: 06.12.06, 13:08 -
Programm stürzt immer ab!
Von Engfer im Forum Visual Basic 6.0Antworten: 5Letzter Beitrag: 20.08.04, 20:06





Zitieren
Login






