Eingabespeicherung bei Fahrtenbuch
-
1. das ist c++
2. du machst das noch nicht so lang oder? das sah bei mir früher auch so aus...if (strcmp(Fahrt.Monat,"Januar") != 0) { if(strcmp(Fahrt.Monat,"Februar") != 0) { if(strcmp(Fahrt.Monat,"März") != 0) { if(strcmp(Fahrt.Monat,"April") != 0) { if(strcmp(Fahrt.Monat,"Mai") != 0) { if(strcmp(Fahrt.Monat,"Juni") != 0) { if(strcmp(Fahrt.Monat,"Juli") != 0) { if(strcmp(Fahrt.Monat,"August") != 0) { if(strcmp(Fahrt.Monat,"September") != 0) { if(strcmp(Fahrt.Monat,"Oktober") != 0) { if(strcmp(Fahrt.Monat,"November") != 0) { if(strcmp(Fahrt.Monat,"Dezember") != 0) { printf("Falsche Eingabe\n"); } } } } } } } } } } } }
int isMonth(char *str){ int l = 12; char *arr[] = { "jan","feb","mar","apr" ,"may","jun","jul","aug" ,"sep","okt","nov","dez" }; while(l--){ if(strcmp(str,arr[l]) == 0) return 1; } return 0; }
-
Jetzt verwirren wir ihn aber total
Hier schreiben wir das ist C++ (?) und in C++ wird ihm geantwortet ist C.
Also da der Beitragssteller es auch nicht (?) weiss - können wir ja noch folgendes versuchen - wie lauten die ersten 10 Zeilen aus dem letzten Projekt vor dieser Aufgabe in deinem Skript, Buch oder Tutorial?
-
Das ist schon C++, da er ja iostream included und einen Namespace macht. Er hat einfach das Prgramm grössenteils in C programmiert. Ein bisschen verwirrend...
-
danke für versuchte Hilfe.
da mir n mix aus c und c++ in der schule beigebracht wird habs ich auch immer schwierig fragen zustellen.
könnt ihr mir trotzdem helfen?
-
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.