Funktionen mit Strukturen



  • Hi, ich habe mich heute mit Funktionen und Strukturen befasst und ein Programm dazu geschrieben. Erst soll nur Monat übergeben und ausgegeben werden und danach die ganze Struktur datum übergeben und ausgegeben werden, nur irgendwie hats nicht ganz geklappt. Er zeigt 10 Fehler an und ich hab keine Ahnung wieso 😞

    #include <iostream>
    using namespace std;
    
    void ausgabeMonat(char *);
    void ausgabeAlles(datum);
    
    int main()
    {
    	struct datum
    	{
    		int jahr;
    		char monat[11];
    		int tag;
    	};
    
    	datum heute;
    	heute.jahr = 2006;
    	heute.monat = "Februar";
    	heute.tag = 17;
    
    	ausgabeMonat(heute.monat);
    	ausgabeAlles(heute);
    
    	fflush(stdin); cin.peek();
    	return 0;
    }
    
    void ausgabeMonat(char * m)
    {
    	cout << "\n" << m;
    }
    
    void ausgabeAlles(datum abc)
    {
    	cout << "\n\n" << abc.jahr;
    	cout << "\n" << abc.monat;
    	cout << "\n" << abc.jahr;
    }
    


  • Du musst die Struktur datum ganz am Anfang deklarieren, sonst weiß der Compiler ja nicht, was das datum im Funktionsprototyp von ausgabeAlles sein soll.

    Außerdem funktioniert die Zuweisung heute.monat = "Februar"; so nicht. Nimm am besten std::strings statt char-Arrays, ansonsten man: strcpy bzw. man: strncpy.

    Ach ja, noch was:
    Wenn der Compiler Fehler angibt, diese bitte mitposten.



  • #include <iostream> 
    using namespace std; 
    
    //Strukturen
    struct datum 
        { 
            int jahr; 
            char monat[11]; 
            int tag; 
        };
    //Funktionsprototypen
    void ausgabeMonat(datum *ptr_heute); 
    void ausgabeAlles(datum *abc); 
    
    //Hauptfunktion
    int main() 
    { 
        //Lokale Variablen
        struct datum heute;
    
        heute.jahr = 2006; 
        strcpy(heute.monat,"Februar");//kopiert Februar in heute.monat 
        heute.tag = 17;
    
        ausgabeMonat(&heute); //Uebergabe der Adresse von Struct
        ausgabeAlles(&heute); //Uebergabe der Adresse von Struct
    
        fflush(stdin); 
        cin.peek(); 
        return 0; 
    } 
    
    void ausgabeMonat(datum *ptr_heute)
    { 
        cout << "\n" << ptr_heute->monat; 
    } 
    
    void ausgabeAlles(datum *abc) 
    { 
        cout << "\n\n" << abc->jahr; 
        cout << "\n" << abc->monat; 
        cout << "\n" << abc->tag; 
    }
    

    ... so sollte es funktionieren.

    Bin auch noch Anfänger 🙂

    Gruss jamiro



  • @Jamiro: Bis auf cout und das fflush(stdin) ist das astreines ANSI-C :p



  • @LordJaxom

    Danke... 🙂

    Bin noch am lernen von C/C++... aber mit Übung wird es bestimmt noch besser... 😋

    gruss jamiro



  • fflush(stdin) sollte man unter allen Umständen vermeiden: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html

    Ersetzen kann man das durch folgenden Code:

    void my_fflush() {
      int c;
      while ( (c = getchar()) != EOF && c != '\n' );
    };
    

    MfG

    GPC



  • danbke schön an alle... hab das jetzt korrigiert und funtioniert einwandfrei 🙂

    hier die korrigierte lösung:

    #include <iostream>
    using namespace std;
    
    struct datum
    	{
    		int jahr;
    		char monat[11];
    		int tag;
    	};
    
    void ausgabeMonat(char *);
    void ausgabeAlles(datum);
    
    int main()
    {
    
    	datum heute;
    	heute.jahr = 2006;
    	strcpy(heute.monat, "Februar");
    	heute.tag = 17;
    
    	ausgabeMonat(heute.monat);
    	ausgabeAlles(heute);
    
    	fflush(stdin); cin.peek();
    	return 0;
    }
    
    void ausgabeMonat(char * m)
    {
    	cout << "\n" << m;
    }
    
    void ausgabeAlles(datum abc)
    {
    	cout << "\n\n" << abc.jahr;
    	cout << "\n" << abc.monat;
    	cout << "\n" << abc.tag;
    }
    


  • cout<<"\n"; // 8[
    
    cout<<endl; // =)
    


  • TravisG schrieb:

    cout<<"\n"; // 8[
    
    cout<<endl; // =)
    

    Und warum, wenn ich fragen darf?



  • ich glaub so ist es besser, weil der puffer dabei geleert wird, oder?



  • C Newbie schrieb:

    TravisG schrieb:

    cout<<"\n"; // 8[
    
    cout<<endl; // =)
    

    Und warum, wenn ich fragen darf?

    weil das obere schneller ist und das untere ein performance fresser 😑


Anmelden zum Antworten