Problem beim Auslesen von Werten aus einer Datei...
-
Moin!
Ich hab da ein Problem...;) Ich hab angefangen ein Programm zu schreiben, dass später eine Pumpe steuern soll (was auch schon funzt, aber noch nicht eigebaut ist). Nun sollte das Programm noch die Funktion bekommen, dass man eigegebene Werte in einer Datei speichern kann (was auch geht) um diese danach auch wieder laden zu können (da liegt das Problem). Ich kenn mich leider nicht wirlich mit Datehandling unter C aus und hoffe, dass mir hier jemand weiter helfen kann!Hier der Code:
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> char wahl, dateiname[80]; int feld, anzahl; int *tabelle= new int[feld]; FILE *stream; c_printf(int x, int y, char text[]) { gotoxy(x,y); printf("%s",text); return(0); } void vormenue() { clrscr(); c_printf(2,1,"---------------------------------"); c_printf(2,2,"Pumpensteuerung Version 5.0"); printf("\n -> Hauptmen%c", (char)129); c_printf(2,4,"---------------------------------"); c_printf(4,6,"1.) Anzahl der Felder"); c_printf(4,7,"2.) Werte eingeben"); c_printf(4,8,"3.) Werte anzeigen"); c_printf(4,9,"4.) Werte bearbeiten"); c_printf(4,10,"5.) Werte speichern"); c_printf(4,11,"6.) Werte laden"); c_printf(4,13,"7.) Informationen"); c_printf(4,14,"8.) Programm beenden"); printf("\n\n\n W%chle einen Men%cpunkt %c ", (char)132, (char)129, (char)175); } void felder() { int menge; clrscr(); c_printf(2,1,"---------------------------------"); c_printf(2,2,"Pumpensteuerung Version 5.0"); c_printf(2,3," -> Anzahl der Felder"); c_printf(2,4,"---------------------------------"); printf("\n\n\n Bitte geben sie die Anzahl der Felder ein %c ", (char)175); scanf("%i", &menge); menge=menge-1; feld=menge; } void eingeben() { int i; clrscr(); c_printf(2,1,"---------------------------------"); c_printf(2,2,"Pumpensteuerung Version 5.0"); c_printf(2,3," -> Eingeben von Werten"); c_printf(2,4,"---------------------------------"); for(i=0; i<=feld; i++) { printf("\n\n Der Wert f%cr Feld [%i] %c ",(char)129, i+1, (char)175); scanf("%i", &tabelle[i]); clrscr(); c_printf(2,1,"---------------------------------"); c_printf(2,2,"Pumpensteuerung Version 5.0"); c_printf(2,3," -> Eingeben von Werten"); c_printf(2,4,"---------------------------------"); printf("\n\n Der Wert '%i' wurde erfolgreich in das Feld[%i] von %i geschrieben!", tabelle[i],i+1,feld+1); } } void anzeigen() { int i; clrscr(); c_printf(2,1,"---------------------------------"); c_printf(2,2,"Pumpensteuerung Version 5.0"); c_printf(2,3," -> Anzeigen der Eingabewerte"); c_printf(2,4,"---------------------------------"); printf("\n\n Es folgen nun %i Werte.\n",feld+1); for(i=0;i<=feld;i++) { printf("\n Wert f%cr Feld [%i] = %i", (char)129, i, tabelle[i]); } printf("\n\n\n\n Mit beliebiger Taste zur%cck zum Men%c!", (char)129, (char)129); getchar(); getchar(); } void bearbeiten() { int i; clrscr(); c_printf(2,1,"---------------------------------"); c_printf(2,2,"Pumpensteuerung Version 5.0"); c_printf(2,3," -> Bearbeiten der Werte"); c_printf(2,4,"---------------------------------"); printf("\n\n Es folgen nun %i Werte.\n",feld+1); for(i=0; i<=feld; i++) { printf("\n Wert f%cr Feld [%i] = %i", (char)129, i, tabelle[i]); } int bearb; printf("\n\n\n Welche Zelle m%cchten Sie bearbeiten?", (char)148); printf("\n Feld[x]\n x = "); scanf("%i", &bearb); printf("\n\n Welchen neuen Wert soll die Zelle [%i] annehmen?", bearb); printf("\n Wert f%cr Feld[%i] %c ", (char)129, bearb, (char)175); scanf("%i", &tabelle[bearb]); } void speichern() { int i; clrscr(); c_printf(2,1,"---------------------------------"); c_printf(2,2,"Pumpensteuerung Version 5.0"); c_printf(2,3," -> Speichern der Werte"); c_printf(2,4,"---------------------------------"); printf("\n\n\n Unter welchem Namen soll die Datei gespeichert wedern?"); printf("\n Bitte geben Sie einen Dateinamen ein %c ", (char)175); getchar(); gets(dateiname); strcat(dateiname,".tab"); if((stream = fopen(dateiname,"w")) == NULL) { printf("\n\n\n Fehler beim %ffnen! Weiter mit Eingabetaste!", (char)153); wahl= 7; } for(i=0; i<=feld; i++) { fprintf(stream,"Feld[%i]=%i\n",i,tabelle[i]); } fclose(stream); printf("\n\n\n Die Datei wurde erfolgreich geschrieben."); printf("\n\ Mit beliebiger Taste zur%cck zum Men%c!", (char)129, (char)129); getchar(); } void laden() { clrscr(); int i=0; FILE *load; int ch; load=fopen("stream.tab","r"); while(!feof(load)) { ch= fgetc(load); if (ch==10) { printf ("\n"); i++; } if (!feof(load)) { if (ch!=10) { printf("%i ",ch); tabelle[i]=ch; } } } fclose (load); getchar(); getchar(); } void infos() { clrscr(); c_printf(2,1,"---------------------------------"); c_printf(2,2,"Pumpensteuerung Version 5.0"); c_printf(2,3," -> Informationen"); c_printf(2,4,"---------------------------------"); c_printf(4,6,"PUMPENSTEUERUNG.EXE"); c_printf(4,7,"Verzweifelter Versuch #5"); c_printf(4,9,"Matthias Splieth"); c_printf(4,10,"LKDTV 12/2"); c_printf(4,11,"11.05.2004"); printf("\n\n\n\n Mit beliebiger Taste zur%cck zum Men%c!", (char)129, (char)129); getchar(); getchar(); } void auswahl() { scanf("%c", &wahl); switch(wahl) { case '1': felder(); break; case '2': eingeben(); break; case '3': anzeigen(); break; case '4': bearbeiten(); break; case '5': speichern(); break; case '6': laden(); break; case '7': infos(); break; case '8': abort(); break; } } void menue() { do { vormenue(); auswahl(); }while(1); } void main() { menue(); }
PS: Ich vermute mal, der Fehler liegt in der Funktion laden(); ;))
Schon mal danke für die Hilfe!
Mfg, Hemlut...
-
Warum machst du es dir denn so schwer?
Schreib in die Datei einfach nur den Wert aus tabelle[i], dann brauchst du beim Laden auch nur das auswerten. Momentan schreibst du ja folgendermaßen in die Datei:
Feld[0]=134
Feld[1]=489
...Einfacher wärs so:
134
489Dann brauchst du beim Laden auch nur fscanf() verwenden.
... //schreiben fprintf(stream, "%i\n", tabelle[i]); ... //lesen fscanf(load, "%i", &tabelle[i]); //anstatt '&tabelle[i]' ginge auch 'tabelle+i' ...
-
hmmm... SO hab ich das ganze noch gar net betrachtet... Danke!