Warum wird nur der erste Buchstabe in einer Datei gespeichert??



  • Hallo Zusammen!

    Mache mir gerade die Arbeit und schreibe ein Programm, mit dem man die Paketscheine der Post bedrucken kann.

    Das Grundgerüst ist auch fertig und ich kann die Adressdaten einlesen, nur wenn ich diese in einer Datei speichern will, werden nur die ersten Zeichen von Name, Strasse und Ort abgespeichert.
    Das Programm erstellt mir ein txt File und speichert auch ab.

    Der Fehler kommt in dem Bereich vor:

    char Name[80], Strasse[80], Ort[80];
    
    cout <<"Bitte geben sie ihren Namen ein: \n";
    
    cin >> Name;
    cout <<"Bitte geben sie ihre Strasse ein: \n";
    cin >>Strasse[80];
    cout <<"Bitte geben sie Ihren Ort ein\n";
    cin >> Ort[80];
    
    Paket Paketschein(Name[80], Strasse[80], Ort[80]);
    
    fout << Paketschein.GetName() << "\n" <<Paketschein.GetStrasse() << "\n" << Paketschein.GetOrt() << "\n" << endl; 
    fout.close();
    

    Vielleicht weiß jemand eien Rat1

    Danke und Grüsse,

    Hier mal der Code vom ganzen Programm:

    //***Programm zu Drucken von Postpaketscheinen***
    
    #include <iostream>
    #include <fstream>
    #include <string>
    
    int Paketschein(); //Prototyp
    int Paeckchen(); //Prototyp
    
    using namespace std;
    
    //******Deklaration fuer die Klasse Paket******
    class Paket
    {
    	public:
    	Paket(char Name,char Strasse,char Ort):itsName(Name),itsStrasse(Strasse),itsOrt(Ort) {}
    	~Paket() {}
    
    	char GetName() {return itsName;}
    	char GetStrasse() {return itsStrasse;}
    	char GetOrt() {return itsOrt;}
    
    	void SetName(char Name) {itsName = Name;}
    	void SetStrasse(char Strasse) {itsStrasse = Strasse;}
    	void SetOrt(char Ort) {itsOrt = Ort;}
    
    	private:
    
    	char itsName, itsStrasse, itsOrt;
    };
    
    //******Hauptprogramm zur Auswahl der Option******
    int main()
    {
    	int choice;
    	cout <<"\t********Willkommen beim Post DruckService********\n\n";
    
    	cout <<"\t(1)Paketschein Drucken    (2)Paeckchenschein Drucken    (3)Beenden\n";
    	cin >>choice;
    
    	switch(choice)
    	{
    		case 1: Paketschein();
    		break;
    		default: cout<<"Auf Wiedersehen!!\n";
    		break;
    	}
    	return choice;
    }
    
    //******Unterprogramm Paket mit Kundenerfassung und speicherung der Daten in einem Txt File******
    int Paketschein()	
    {
    cout <<"\tAdressdaten Eingabe für den Druck des Paketscheins\n\n";
    char filename[80];
    cout <<"Bitte Dateiname eingeben: ";
    cin >>filename;
    ofstream fout("Paketdruck.txt", ios::out);
    
    if(!fout)
    {
    	cout <<"Es ist nicht moeglich " <<filename << " zu oeffnen\n";
    	return(1);
    }
    
    char Name[80], Strasse[80], Ort[80], text[50];
    
    cout <<"Bitte geben sie ihren Namen ein: \n";
    
    cin >> Name;
    cout <<"Bitte geben sie ihre Strasse ein: \n";
    cin >>Strasse[80];
    cout <<"Bitte geben sie Ihren Ort ein\n";
    cin >> Ort[80];
    
    Paket Paketschein(Name[80], Strasse[80], Ort[80]);
    
    fout << Paketschein.GetName() << "\n" <<Paketschein.GetStrasse() << "\n" << Paketschein.GetOrt() << "\n" << endl; 
    fout.close();
    
    cout <<"Paket :" <<Paketschein.GetName() <<endl;
    cout <<"Strasse : "<<Paketschein.GetStrasse() <<endl;
    cout <<"Ort : "<<Paketschein.GetOrt() <<endl;
    }
    


  • Hallo

    Warum inklidierst du <string>, wenn du dann gar keine std::strings verwendest. das würde ich dir übrigens empfehlen. Wenn du den aletn C-Header benutzen willst, dann binde <cstring> in dein Programm ein.

    chrische



  • Hallo,

    Dir ist schon klar, dass du bei

    cout <<"Bitte geben sie ihre Strasse ein: \n"; 
    cin >>Strasse[80]; 
    cout <<"Bitte geben sie Ihren Ort ein\n"; 
    cin >> Ort[80];
    

    Übrigens: so etwas hässliches wie return choise habe ich noch lange nicht gesehen. Mach das einmal schnell weg. Main sollte lieber 0 zurückgeben.

    Wenn du nur Kleinigkeiten abändern willst dann so:

    Paket Paketschein(Name, Strasse, Ort);
    
    cout <<"Bitte geben sie ihren Namen ein: \n";
    cin >> Name;
    cout <<"Bitte geben sie ihre Strasse ein: \n";
    cin >>Strasse;
    cout <<"Bitte geben sie Ihren Ort ein\n";
    cin >> Ort;
    
    class Paket
    {
        public:
        Paket(char *Name,char *Strasse,char *Ort):itsName(Name),itsStrasse(Strasse),itsOrt(Ort) {}
        ~Paket() {}
        char *GetName() {return itsName;}
        char *GetStrasse() {return itsStrasse;}
        char *GetOrt() {return itsOrt;}
        void SetName(char *Name) {itsName = Name;}
        void SetStrasse(char *Strasse) {itsStrasse = Strasse;}
        void SetOrt(char *Ort) {itsOrt = Ort;}
        private:
        char *itsName, *itsStrasse, *itsOrt;
    };
    

    MFG winexec*



  • Hallo

    winexec* schrieb:

    Hallo,

    Dir ist schon klar, dass du bei

    cout <<"Bitte geben sie ihre Strasse ein: \n";
    cin >>Strasse[80];
    cout <<"Bitte geben sie Ihren Ort ein\n";
    cin >> Ort[80];

    MFG winexec*

    Anscheinend nicht.
    @Defender: Benutze einfach std::strings und alles wird besser.

    chrische



  • Wie benutzt man den std::string
    Man muss es ja definieren mit using namespace std richtig?
    Und wie lese ich dann was mit std ein?
    Kann dem nicht so ganz folgen 😞

    Grüsse



  • Hallo,

    Ein Beispiel habe ich schon gezeigt. Du kannst das Programm auch so schreiben:

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    int Paketschein();
    int Paeckchen();
    
    class Paket{
        public:
        Paket(string Name,string Strasse,string Ort):itsName(Name),itsStrasse(Strasse),itsOrt(Ort) {}
        ~Paket() {}
    
        string GetName() {return itsName;}
        string GetStrasse() {return itsStrasse;}
        string GetOrt() {return itsOrt;}
    
        void SetName(string Name) {itsName = Name;}
        void SetStrasse(string Strasse) {itsStrasse = Strasse;}
        void SetOrt(string Ort) {itsOrt = Ort;}
    
        private:
        string itsName, itsStrasse, itsOrt;
    };
    
    int main(){
        int choice;
        cout <<"\t********Willkommen beim Post DruckService********\n\n";
        cout <<"\t(1)Paketschein Drucken    (2)Paeckchenschein Drucken    (3)Beenden\n";
        cin >>choice;
        switch(choice)
        {
            case 1:
                Paketschein();
                break;
            default:
                cout<<"Auf Wiedersehen!!\n";
                break;
        }
        return 0;
    }
    
    int Paketschein()
    {
    cout <<"\tAdressdaten Eingabe für den Druck des Paketscheins\n\n";
    string filename;
    cout <<"Bitte Dateiname eingeben: ";
    cin >>filename;
    ofstream fout(filename.c_str(), ios::out);
    
    if(!fout)
    {
        cout <<"Es ist nicht moeglich " <<filename << " zu oeffnen\n";
        return(1);
    }
    string Name, Strasse, Ort, text;
    
    cout <<"Bitte geben sie ihren Namen ein: \n";
    cin >> Name;
    cout <<"Bitte geben sie ihre Strasse ein: \n";
    cin >> Strasse;
    cout <<"Bitte geben sie Ihren Ort ein\n";
    cin >> Ort;
    
    Paket Paketschein(Name, Strasse, Ort);
    
    fout << Paketschein.GetName() << "\n" <<Paketschein.GetStrasse() << "\n" << Paketschein.GetOrt() << "\n" << endl;
    fout.close();
    
    cout <<"Paket :" <<Paketschein.GetName() <<endl;
    cout <<"Strasse : "<<Paketschein.GetStrasse() <<endl;
    cout <<"Ort : "<<Paketschein.GetOrt() <<endl;
    }
    

    MFG winexec*



  • Danke, Danke, Danke !!!! 🙂

    Grüsse


Anmelden zum Antworten