Fehlerhaftes Schreibverhalten in .txt aus Class



  • FILE * FilePointer = fopen("test.txt","w+");
    fprintf(FilePointer, "%d,%s,%s", obj1.GetStatus().c_str(), obj1.GetCarName().c_str(), obj1.GetCarBrand().c_str());
    fclose(FilePointer);
    
    ofstream File("test.txt");
    File<<obj1.GetStatus()<<obj1.GetCarName()<<obj1.GetCarBrand();
    File.close();
    


  • Toll... 😞
    Das will alles nicht laufen 😞 😞 😞
    Ich habe das ganze jetzt mal ohne die Class String gemeacht weil das alles zu umständlich ist 😕

    Hier mal der Code

    #include <fstream>
    #include <iostream>
    #include <string>
    using namespace std;
    
    class ClassCar
    {
    private:
        unsigned short int Status;
        unsigned short int CostPerWeekDay;
        unsigned short int CostPerWeekFinalDay;
        unsigned short int FlatMileageRate;
        unsigned short int BasicChargePerDay;
        char CarName[50];
        char CarBrand[50];
    
        //string CarName;
        //string CarBrand;
    
    public:
        // Get.Set->Status
        unsigned short int GetStatus()
        {   return(Status); }
        void SetStatus(unsigned short int fkt_Status)
        {   Status = fkt_Status;    }
    
        // Get.Set->CostPerWeekDay
        unsigned short int GetCostPerWeekDay()
        {   return(CostPerWeekDay); }
        void SetCostPerWeekDay(unsigned short int fkt_CostPerWeekDay)
        {   CostPerWeekDay = fkt_CostPerWeekDay;    }
    
        // Get.Set->CostPerWeekFinalDay
        unsigned short int GetCostPerWeekFinalDay()
        {   return(CostPerWeekFinalDay);    }
        void SetCostPerWeekFinalDay(unsigned short int fkt_CostPerWeekFinalDay)
        {   CostPerWeekFinalDay = fkt_CostPerWeekFinalDay;  }
    
        // Get.Set->FlatMileageRate
        unsigned short int GetFlatMileageRate()
        {   return(FlatMileageRate);    }
        void SetFlatMileageRate(unsigned short int fkt_FlatMileageRate)
        {   FlatMileageRate = fkt_FlatMileageRate;  }
    
        // Get.Set->BasicChargePerDay
        unsigned short int GetBasicChargePerDay()
        {   return(BasicChargePerDay);  }
        void SetBasicChargePerDay(unsigned short int fkt_BasicChargePerDay)
        {   BasicChargePerDay = fkt_BasicChargePerDay;  }
    
        // Get.Set->CarName
            void SetCarName(void)
            {   printf("Type in the cars name: "); gets(this->CarName);  }
            char * GetCarName(char *n)
            {   strcpy(n,CarName); return(CarName); }
    
        // Get.Set->CarBrand
            void SetCarBrand(void)
            {   printf("Type in the cars brand: "); gets(this->CarBrand);    }
            char * GetCarBrand(char *n)
            {   strcpy(n,CarBrand); return(CarBrand);   }
    
        void WriteToDisk()
        {   
            FILE * FilePointer = fopen("test.txt","w+");
            fprintf(FilePointer, "%d,", Status);
            fprintf(FilePointer, "%s,", CarName);
            fprintf(FilePointer, "%s", CarBrand);   
            fclose(FilePointer);
    
        }
    };
    
    int main()
    {
    ClassCar obj1;
    char n[1];
    obj1.SetCarName();
    obj1.SetCarBrand();
    obj1.SetBasicChargePerDay(100);
    obj1.SetCostPerWeekDay(10);
    obj1.SetCostPerWeekFinalDay(15);
    obj1.SetFlatMileageRate(3);
    obj1.SetStatus(1);
    cout << obj1.GetStatus();
    cout << obj1.GetCarName(n);
    cout << obj1.GetCarBrand(n);
    obj1.WriteToDisk();
    
    return(1);
    }
    


  • wieso return 1?
    return 0; sollte reichen. und ganz ohne return geht's natürlich auch. aber was anderes als 0 gilt als Fehler.

    btw. geht der Code so jetzt?



  • ok, das mit return 0 wusste ich nicht.
    ja so läuft der code.
    allerdings habe ich ihn jetzt noch ein wenig verändert und habe probleme mit dem schreiben in die datei aber das krieg ich schon gebacken. 😉



  • Irgendwie scheint mein Compiler mich ver*****en zu wollen!!! 😡 😮

    Der ganze Sourcecode ist geblieben bis aud die WriteToDisk Methode ist ein bisschen geändert:

    void WriteToDisk()
        {   
            FILE * FilePointer = fopen("test.txt","a+");
            cout << this->Status;
            fprintf(FilePointer, "\n");
            fprintf(FilePointer, "%d,", Status);
            fprintf(FilePointer, "%s,", CarName);
            fprintf(FilePointer, "%s", CarBrand);   
            fclose(FilePointer);
        }
    

    Ich hatte eben immer falsche werte in der Textdatei an der Stelle "Status" stehen. dann habe ich rausgefunden dass wenn ich unten um Hauptprogramm die beiden zeilen

    cout << obj1.GetCarName(n);
    cout << obj1.GetCarBrand(n);
    

    A U S K O M M E N T I E R E, dieser Fehler nicht mehr auftritt. Wie kann das sein???????? 😕 😕



  • warum verwendest du nicht durchgehend C++, anstatt die Verwendung von streams und alten C-Funktionen zu mixen? Hat das einen bestimmten Grund? Mit Streams sollte das alles funktionieren...

    Mfg, smasher1985



  • Original erstellt von smasher1985:
    **warum verwendest du nicht durchgehend C++, anstatt die Verwendung von streams und alten C-Funktionen zu mixen? Hat das einen bestimmten Grund? Mit Streams sollte das alles funktionieren...

    Mfg, smasher1985**

    Ich wollte das ja auch alles mit strings machen, aber da haben sich mir zu grosse Probleme aufgetan, die ich nicht überwinden konnte (zumal ich damit noch nie gearbetet habe :()



  • was für Probleme denn?

    [ Dieser Beitrag wurde am 16.03.2003 um 11:48 Uhr von smasher1985 editiert. ]



  • #include <fstream>
    #include <string>
    using namespace std;
    
    //[...]
    
    void WriteToDisk()
        {   
            ofstream File("test.txt");
            cout << Status;
            File<<"\n";
            File<<Status;
            File<<CarName;
            File<<CarBrand;   
        }
    

    <A U S K O M M E N T I E R E, dieser Fehler nicht mehr auftritt. Wie kann das sein???????? >
    cout << obj1.GetCarName(n);
    cout << obj1.GetCarBrand(n);

    Eventuell modifizieren die Methoden GetCarName(n) und GetCarBrand(n) Deine Daten.

    [ Dieser Beitrag wurde am 17.03.2003 um 09:52 Uhr von Knuddlbaer editiert. ]



  • n ist exakt 1 byte groß
    du willst aber ne ganze zeichenkette in dieses 1 byte schreiben - funktioniert nicht.

    die get methoden sind sowieso etwas strange...

    vielleicht verwendest du besser std::string - das ist einfacher, denn du hast zeiger noch nicht wirklich verstanden. also nimm dir ein herz und verwende c++ - da kannst du solche fehler nicht machen.


Anmelden zum Antworten