struct ausgeben



  • Nabend liebe leute...

    ichhab da mal ne frage bzgl. struct...

    ich hab forgenden prog geschieben:

    #include<iostream>
    #include<string>
    
    struct Date
    {
    	int month;
       int Day;
       int year;
    };
    
    enum TimeFormatE
    {
    	DATE,
       SECOND
    };
    
    struct Time
    {
    	union
       {
       Date date;
       long int seconds;
       };
       TimeFormatE format;
    };
    
    struct Statistics
    {
    	float failRate;
       Date lastServiced;
       Time downTime;
    };
    
    struct MachineRec
    {
    	int id;
       std::string name;
       Statistics history;
       Date purchaseDate;
       float cost;
    };
    
    int main()
    
    {
    	MachineRec Kaffee;
    
        Kaffee.id =17;
        Kaffee.name = "Kaffemaschine";
        Kaffee.history.failRate =0.01;
        Kaffee.purchaseDate.Day = 13;
    	 Kaffee.purchaseDate.month = 10;
    	 Kaffee.purchaseDate.year = 2000;
        Kaffee.cost=599.99;
        Kaffee.history.lastServiced.Day = 17;
        Kaffee.history.lastServiced.month = 11;
        Kaffee.history.lastServiced.year = 2001;
        Kaffee.history.downTime.seconds =70;
      // cout << Kaffee.*;
           return 0;
    }
    

    so nun hab ich forgende prop......ich möchte den kompletten stuct Kaffee satz ausgeben...

    d.h.

    cout << Kaffee.id;
    .
    .
    .

    usw..

    so nun zu frage..gibt es irgendwie ne möglichkeit das zu machen ohe zu jeden eintrag ein cout schriebn zu müssen????

    danke mon3d



  • du kannst den << operator für deinen MachineRec überladen:

    ostream &operator << (ostream &out, const  MachineRec &m) {
        return out << m.id << '\n'
            << m.name << '\n'
            << m.history.failRate << '\n'
            << m.purchaseDate.Day << '\n'
            /*etc etc*/;
    }
    
    int main () {
    
        MachineRec Kaffee;
        Kaffee.id =17;
        Kaffee.name = "Kaffemaschine";
        Kaffee.history.failRate =0.01;
        Kaffee.purchaseDate.Day = 13;
         Kaffee.purchaseDate.month = 10;
         Kaffee.purchaseDate.year = 2000;
        Kaffee.cost=599.99;
        Kaffee.history.lastServiced.Day = 17;
        Kaffee.history.lastServiced.month = 11;
        Kaffee.history.lastServiced.year = 2001;
        Kaffee.history.downTime.seconds =70;
    
        cout << Kaffee;
    }
    


  • hi davie...

    ich bin ein prog newbie udn verstehe dein text stell enciht könnste du sie mir kurz erläutern?? wäre super leib von dir..

    ostream &operator << (ostream &out, const  MachineRec &m) { 
        return out << m.id << '\n' 
            << m.name << '\n' 
            << m.history.failRate << '\n' 
            << m.purchaseDate.Day << '\n' 
            /*etc etc*/;
    

    danke mon3d



  • dann... wirst du das, was ich dir gezeigt habe, wahrscheinlich erst später lernen.
    nur kurz: cout arbeitet mit dem operator <<. diesen kannst du aber für jeden deiner selbstdefinierten typen überladen.
    das ist so, als würdest du dir eine funktion "print" schreiben:

    void print (const MachineRec &blub) {
      cout << blub.was_auch_immer << '\n';
    }
    
    int main () {
      MachineRec Kaffee;
      print (Kaffee);
    }
    

    nur eben mit dem "<<" als funktion.



  • kras danke



  • sieht witzig aus....obwoll ich nicht so wirtkich druas schlau werde...
    kennst du viielleicht ein link wo man sowas nach elsen kann oder zu welche kapitel socle hexereien gehören???

    danke mon3d



  • das gehört zum kapitel "operatoren überladen" operator overloading - wie auch immer.
    hier zb ein online c++ kurs: http://www.schornboeck.net/ckurs/operatoren.htm
    in jedem guten c++ buch zum lernen wird das auch ein thema sein.



  • so ich hab das program noch weiter gebastelt aber es wird immer katastrophaler

    #include<iostream>
    #include<string>
    
    struct Date
    {
    	int month;
       int Day;
       int year;
    };
    
    enum TimeFormatE
    {
    	DATE,
       SECOND
    };
    
    struct Time
    {
    	union
       {
       Date date;
       long int seconds;
       };
       TimeFormatE format;
    };
    
    struct Statistics
    {
    	float failRate;
       Date lastServiced;
       Time downTime;
    };
    
    struct MachineRec
    {
    	int id;
       std::string name;
       Statistics history;
       Date purchaseDate;
       float cost;
    };
    
    int main()
    
    {
    
    	MachineRec Kaffee;
    
        Kaffee.id =17;
        Kaffee.name = "Kaffemaschine";
        Kaffee.history.failRate =0.01;
        Kaffee.purchaseDate.Day = 13;
    	 Kaffee.purchaseDate.month = 10;
    	 Kaffee.purchaseDate.year = 2000;
        Kaffee.cost=599.99;
        Kaffee.history.lastServiced.Day = 17;
        Kaffee.history.lastServiced.month = 11;
        Kaffee.history.lastServiced.year = 2001;
        Kaffee.history.downTime.seconds =70;
        cout << "ID: "<<Kaffee.id<<endl;
        cout << "Name: "<<Kaffee.name<<endl ;
    	 cout << "Failrate: "<<Kaffee.history.failRate<<endl ;
        cout << "Anschaffungsdatum: "<<Kaffee.purchaseDate.Day<<".";
    	 cout << Kaffee.purchaseDate.month<<".";
    	 cout << Kaffee.purchaseDate.year<<endl;
        cout << "Kosten: "<<Kaffee.cost<<"€"<<endl;
        cout << "Letzte Reparatur: "<< Kaffee.history.lastServiced.Day<<".";
        cout << Kaffee.history.lastServiced.month<<".";
        cout << Kaffee.history.lastServiced.year<<endl;
    	 cout << "Ausfahllzeit: "<<Kaffee.history.downTime.seconds<<"\n\n\n";
    
        Kaffee.history.downTime.date.Day  = 4;
        Kaffee.history.downTime.date.month= 2;
        Kaffee.history.downTime.date.year = 1;
    
    	 cout << "ID: "<<Kaffee.id<<endl;
        cout << "Name: "<<Kaffee.name<<endl ;
    	 cout << "Failrate: "<<Kaffee.history.failRate<<endl ;
        cout << "Anschaffungsdatum: "<<Kaffee.purchaseDate.Day<<".";
    	 cout << Kaffee.purchaseDate.month<<".";
    	 cout << Kaffee.purchaseDate.year<<endl;
        cout << "Kosten: "<<Kaffee.cost<<endl;
        cout << "Letzte Reparatur: "<< Kaffee.history.lastServiced.Day<<".";
        cout << Kaffee.history.lastServiced.month<<".";
        cout << Kaffee.history.lastServiced.year<<endl;
    	 cout << "Ausfallzeit: "<<Kaffee.history.downTime.date.Day<<" Tage, ";
        cout << Kaffee.history.downTime.date.month<<" Monate ,und ";
        cout << Kaffee.history.downTime.date.year<<" Jahr"<<endl ;
        return 0;
        }
    

    so nun sehe ich ees nicht so ganz ein das ich ewig alles neu schaben schonn, das geht doc bestimmt auch mit funktionne oder sowas ...ich hab versuceh aber ich weist nciht was ich über geben soll.....

    void anzeige()
    {
    	 cout << "ID: "<<Kaffee.id<<endl;
        cout << "Name: "<<Kaffee.name<<endl ;
    	 cout << "Failrate: "<<Kaffee.history.failRate<<endl ;
        cout << "Anschaffungsdatum: "<<Kaffee.purchaseDate.Day<<".";
    	 cout << Kaffee.purchaseDate.month<<".";
    	 cout << Kaffee.purchaseDate.year<<endl;
        cout << "Kosten: "<<Kaffee.cost<<endl;
        cout << "Letzte Reparatur: "<< Kaffee.history.lastServiced.Day<<".";
        cout << Kaffee.history.lastServiced.month<<".";
        cout << Kaffee.history.lastServiced.year<<endl;
    	 cout << "Ausfallzeit: "<<Kaffee.history.downTime.date.Day<<" Tage, ";
        cout << Kaffee.history.downTime.date.month<<" Monate ,und ";
        cout << Kaffee.history.downTime.date.year<<" Jahr"<<endl ;
    }
    

    so hatte ich es gedacht...

    ich hab die funktion nicht inizialisiert soll nur in bsp sein wie ich es versuchte udn wie es nciht klappte...kann mir vieleicht jemadn helfen???

    danke



  • Versuch mal

    void anzeige(MachineRec& Kaffee) 
    { 
         cout << "ID: "<<Kaffee.id<<endl; 
         ...
         cout << Kaffee.history.downTime.date.year<<" Jahr"<<endl ; 
    }
    


  • danke werde ich direk mal ausprobieren.-..
    ´
    was würde man den übergebn wenn man ein fnk schreibt die werte ein liest?
    wäre nett sich jemand melden würde...

    ...

    danke mon 3d



  • void anzeige(MachineRec& Kaffee)  
    {  
         cout << "ID: "<<Kaffee.id<<endl;  
         ... 
         cout << Kaffee.history.downTime.date.year<<" Jahr"<<endl ;  
    }
    

    ichhab da noch ne Frage...
    was bedeutet den das & nach nem MachineRec???

    danke mon3d



  • Vielleicht hilft dir dieser Link.



  • mach aus der struct ne klasse und gib ihr eine ausgabefunktion, dann ist das ne saubere sache. nicht umsonst bist du hier bei c++ 😉 und um das viele geschreibsel kommst du nicht rum, wenn du umbedingt ausgaben haben willst.


Anmelden zum Antworten