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 istHier 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.