Eingabespeicherung bei Fahrtenbuch
-
teil das ding doch erstmal in schöne functionen ein, denn das gabs auch schon in c dann schauen wir weiter
-
@functioner: Ich weiß nicht was du hast du Programm ist in zwei Funktionen aufgeteilt:
in die Funktion Fahrtenbuch Eintrag und Uebersicht.@ f.-th.:
Hier habe ich mal einen kleinen Auschnitt aus einen Taschenrechner von mir:#include "stdafx.h" #include <iostream> #include <math.h> using namespace std; //+, -, *, /, %, Quadrat, Wurzel void main() { int izahl1 = 0, izahl2 = 0, izahl3 = 0, izahl4 = 0, izmenge = 0, iergebnis; float fergebnis; char auswahl, entscheidung = 0; do { printf("Bitte Waehlen sie eine Rechenart aus:\n + = addieren \n - = subtrahieren \n * = multiplizieren \n / = dividieren \n %% = Modulo \n Q = Quadrat \n W = Wurzel\n>>\a\a\a\a\a\a\a\a\a\a"); cin >> auswahl; switch(auswahl) { case'+': printf("Wieviel Zahlen moechten sie addieren?(min. 2 maximal 4)"); cin >> izmenge; if(izmenge == 2) { printf("Bitte zwei Zahlen eingeben:\n"); cin >> izahl1; cin >> izahl2; iergebnis = izahl1 + izahl2; printf("Das Ergebnis ist: %d\n",iergebnis); } if(izmenge == 3) { printf("Bitte drei Zahlen eingeben:\n"); cin >> izahl1; cin >> izahl2; cin >> izahl3; iergebnis = izahl1 + izahl2 + izahl3; printf("Das Ergebnis ist: %d\n", iergebnis); } if(izmenge == 4) { printf("Bitte vier Zahlen eingeben:\n"); cin >> izahl1; cin >> izahl2; cin >> izahl3; cin >> izahl4; iergebnis = izahl1 + izahl2 + izahl3 + izahl4; printf("Das Ergebnis ist: %d\n", iergebnis); } break; hoffe das hilft der weiter mir zu helfen
-
bei deinem ersten programm sollte _keine_ function länger als 10 zeilen sein also 160 / 10 = 16 und nicht 2...
-
@functioner: die länge der Funktionen ist total irrelevant für meine frage.
-
Extension „dat“ zusammensetzen. Beispiel: Juni2010.dat.
Wäre die Struktur FBJJJJMM.dat als Dateiname nicht besser?
Die läßt sich sortieren.struct Fahrtenbuch Eintrag() { struct Fahrtenbuch Fahrt; ... return Fahrt; }
kann schieflaufen, besser (wenn auch dann immer noch nicht threadsafe)
struct Fahrtenbuch Eintrag() { static struct Fahrtenbuch Fahrt; ... return Fahrt; }
-
könnte man den namen auch mit sprintf ändern??
wenn ja wie?
-
Kann man machen, ist aber nicht das Hauptproblem.
Folgender Ansatz sollte helfen:typedef struct { char Monat[20]; int TagDerFahrt; float Startzeit; float Endzeit; int gKilometer; char Ziel[50]; char GrundFahrt[50]; } Fahrt; Fahrt Eintrag(); void Uebersicht(Fahrt); main() { int auswahl; Fahrt fahrt; while(1) switch(puts( "Willkommen zu Ihren Fahrtenbuch\n" "Was moechten Sie tun???\n" "1 = einen Eintrag in das Fahrtenbuch machen\n2 = Uebersicht vom Fahrtenbuch\nsonst = Ende\n" "Auswahl:"),(auswahl=getchar())=='\n'?getchar():auswahl) { case '1': fahrt = Eintrag(); break; case '2': Uebersicht(fahrt); break; default: return 0; } return 1; }
Die eigentliche Funktionalität gehört in die Funktionen, dass Hauptprogramm kümmert sich nur um die Benutzerschnittstelle.
-
habe die Funktion Uebersicht überarbeitet sie ist zwar fertig bloß gibt er mir diese Fehler aus:
error C2664: 'fwrite': Konvertierung des Parameters 4 von 'char [20]' in 'FILE *' nicht möglich
error C2664: 'fseek': Konvertierung des Parameters 1 von 'char [20]' in 'FILE *' nicht möglich
error C2664: 'fread': Konvertierung des Parameters 4 von 'char [20]' in 'FILE *' nicht möglich
error C2664: 'fclose': Konvertierung des Parameters 1 von 'char [20]' in 'FILE *' nicht möglichQuelltext:
void Uebersicht(struct Fahrtenbuch Fahrt) { char datei[20]="test.txt", textpuffer[100]; int rueck = 0; FILE * fp; sprintf(datei,"%d %s.dat",Fahrt.Jahr,Fahrt.Monat); fp=fopen(datei,"a+"); if(datei == NULL) { printf("Fehler beim Oeffnen der Datei! \n"); } else { rueck = fwrite(&Fahrt, sizeof(Fahrt), 1, datei); if(rueck != 0) { //filepointer an anfang setzen fseek(datei, 0, SEEK_SET); rueck = fread(&Fahrt, sizeof(Fahrt), 1, datei); if(rueck != 0) { printf("|Tag der Fahrt|Startzeit|Endzeit|gefahr.Kilometer| Ziel |GrundDerFahrt|\n"); printf("|-------------|---------|-------|----------------|----------|-------------|\n"); printf("|%d |%.2f |%.2f |%d |%s |%s |\n",Fahrt.TagDerFahrt,Fahrt.Startzeit,Fahrt.Endzeit,Fahrt.gKilometer,Fahrt.Ziel,Fahrt.GrundFahrt); } } else { printf("Fehler beim Schreiben in Datei! \n"); } fclose(datei); } }
Bitte um Verbesserungsvorschläge
-
Die Fehlermeldungen sind doch wohl eindeutig.
Ersetze dort mal datei durch fp.
-
THX für die Hilfe funktioniert ohne Fehler.