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öglich

    Quelltext:

    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.


Anmelden zum Antworten