Finde den Fehler in Einlesefunktion nicht.
-
Hallo, hatte in der Vorlesung diese Einlesefunktion, sie hat jedoch einen Fehler, da sie nur die erste Zeile ausgibt. Die Dateien haben jeweils 5 Datensätze.
Fehlermeldung:
Rechnung fuer:
Horst Hansen;Karl-Marx-Strasse 101; 10101 Berlin;
Horst Hansen`Karl-Marx-Strasse 101
H2
Folgende Artikel haben Sie gekauft:
Tastatur; 5; 2;
Tastatur\ 5
ú?
á9¶#include <stdio.h> #include <stdlib.h> #include <string.h> void druckeStriche() void readData(FILE* in, char name[], char strasse[], char ort[]) { char zeile[192] = {'\0'}; fgets(zeile, 191, in); printf("%s", zeile); int l = strlen(zeile); zeile[l-1] = '\0'; int index = 0; char c = zeile[index]; while(c != '\0') //'\0'-> NULLBYTE { if (c != ';') { name[index] = c; }; index++; c = zeile[index]; } } void readRechnung(FILE* in, char gegenstand[], char preis[], char stueckzahl[]) { char zeile[192] = {'\0'}; fgets(zeile, 191, in); printf("%s", zeile); int l = strlen(zeile); zeile[l-1] = '\0'; int index = 0; char c = zeile[index]; while(c != '\0') //'\0'-> NULLBYTE { if (c != ';') { gegenstand[index] = c; }; index++; c = zeile[index]; } } int main() { printf("Rechnung fuer: \n"); char name[64] ;// initialisieren char strasse[64]; char ort[64]; FILE* data ; data = fopen("Daten.txt", "r"); if (data == NULL) { printf("Öffnen der Datei \"%s\" hat nicht geklappt!\n", "Daten.txt"); return EXIT_FAILURE; } // (Fehlerbehandlung!)->siehe Übung 2 Datei kopieren readData(data, name, strasse, ort); printf("%s\n", name); printf("%s\n", strasse); printf("%s\n", ort); fclose(data); printf("Folgende Artikel haben Sie gekauft: \n"); char gegenstand[64] ;// initialisieren char preis[64]; char stueckzahl[64]; FILE* data1 ; data1 = fopen("Daten2Preis.txt", "r"); if (data1 == NULL) { printf("Öffnen der Datei \"%s\" hat nicht geklappt!\n", "Daten2Preis.txt"); return EXIT_FAILURE; } // (Fehlerbehandlung!)->siehe Übung 2 Datei kopieren readData(data1, gegenstand, preis, stueckzahl); printf("%s\n", gegenstand); printf("%s\n", preis); printf("%s\n", stueckzahl); fclose(data1); return EXIT_SUCCESS; }
-
Kein Wunder, fgets wird ja auch nur einmal, für eine Zeile aufgerufen.
-
Tausend Dank
Bin totaler Anfänger und quälle mich zu meiner Belegarbeit.
Habe deinen Rat befolgt und zunächst in der einen Datei noch ein fgets hinzugefügt.
Habe jetzt noch 2 Fragen:
1. kann ich dort eine for-Schleife zum Einlesen einbauen? Damit er alle Zeilen ausliest?
2. Kannst du mir noch sagen wie ich die Dopplung und H2 wegbekomme?
Rechnung fuer:
Ausgabe:
Ernestine Musterfrau;Gebirgsallee 8a;14534 Bergdorf/Franken;
Gehaeuse;102.24;1;
Gehaeuse 102.24|1 ]
H2
Folgende Artikel haben Sie gekauft:
Tastatur; 5; 2;\
ú?
á9¶Nochmals danke danke danke
-
danzriba schrieb:
Habe jetzt noch 2 Fragen:
1. kann ich dort eine for-Schleife zum Einlesen einbauen? Damit er alle Zeilen ausliest?Da sieht man, wie genau du dir meinen Code in deinem anderen Thread angeguckt hast. So wie es aussieht gar nicht
Sonst wüßtest du jetzt, wie man alle Zeilen einlesen kanndanzriba schrieb:
2. Kannst du mir noch sagen wie ich die Dopplung und H
2 wegbekomme?
Rechnung fuer:
Ausgabe:
Ernestine Musterfrau;Gebirgsallee 8a;14534 Bergdorf/Franken;
Gehaeuse;102.24;1;
Gehaeuse 102.24|1 ]
H2
Freunde dich mit deinem Debugger an, steppe durch den Code und sieh dir den Inhalt deiner Variablen an. Alternativ kannst du dir Zwischenergebnisse mit printf anzeigen lassen, was den gleichen Effekt hat. Langfristig gesehen, ist ersteres jedoch die bessere Wahl. Dann siehst du an welcher Stelle im Code etwas nicht stimmt.
Gruß,
B.B.
-
P.S.
Ergänzend zur Frage 1:
Jep, geht mit for Schleife, sieht aber mMn AA aus:for (;fgets(buf, sizeof(buf),fp);) { /*Machst du was mit Puffer.*/ }
Gruß,
B.B.
-
Doch, doch, angeschaut habe ich mir den Code, doch nicht so genau, da muß ich dir recht geben. Ich habe zu sehr auf die Pointer geschaut. Da wir zur Zeit keine Pointer benutzen dürfen ausser FILE*, habe ich auf das zweite Programm aus der Vorlesung gegriffen. Muß den Beleg bis Dienstag abgeben, daher werde ich bestimmt noch einige Anfragen stellen und viele dumme werden dabei sein
Es geht sehr, sehr langsam voran, jedoch habe ich bis jetzt einiges gelernt.
Danke für die Tipps bisher, sie haben mir einiges klargemacht.