Funktionen, Ausgabe mehrerer Werte



  • Griever schrieb:

    void Eingabe(struct datum * werte)
    {
    	printf("Jahr\n");
    	scanf("%d", &werte.j); // hier bekomme ich Fehlermeldungen
    	printf("Monat\n");
    	scanf("%d", &werte.m); // hier bekomme ich Fehlermeldungen
    	printf("Tag\n");
    	scanf("%d", &werte.t); // hier bekomme ich Fehlermeldungen
    }
    

    'werte' ist ein pointer auf eine struct. verwende dafür '->'
    beispiel:

    scanf("%d", &werte->j);  // sollte gehen
    


  • Stimmt "test" ist ja dann global...Und das ist ja böse 🙂 Dürfen wir in der Prüfung nicht machen, also Globale Variablen setzen.

    Fehlermeldungen vom Compiler:

    error C2228: Links von ".j" muss sich eine Klasse/Struktur/Union befinden.
    error C2228: Links von ".m" muss sich eine Klasse/Struktur/Union befinden.
    error C2228: Links von ".t" muss sich eine Klasse/Struktur/Union befinden.

    scanf("%d", &werte->j);
    

    So hatte ichs am Anfang sogar... hab da aber bestimmt das & vergessen 🙄 passiert mir bei Scanf immer wieder.



  • Jetzt hab ichs 😃 Danke! 🙂

    #include <stdlib.h>
    #include <stdio.h>
    
    /* ---Funktionen & Deklarationen --- */
    
    struct datum {
    	int j;
    	int m;
    	int t;
    };
    
    void Eingabe(struct datum *);
    
    /* ---Hauptprogramm--- */
    
    int main(int argc, char *argv[])
    {
    	int j,m,t;
    	struct datum test;
    	Eingabe(&test);
    	printf("Jahr: %d Monat: %d Tag: %d\n",test.j,test.m,test.t);
    	system("PAUSE");
    	return(0);
    }
    
    /* ---Eingabe--- */
    
    void Eingabe(struct datum * werte)
    {
    	printf("Jahr\n");
    	scanf("%d", &werte->j);
    	printf("Monat\n");
    	scanf("%d", &werte->m);
    	printf("Tag\n");
    	scanf("%d", &werte->t);
    }
    

    Und was ist jetz der Vorteil an Strukturen, gegenüber der Methode mit Zeigern?

    Was macht sie denn "schöner"? 😕 Oder hab ich jetzt schon wieder unnötiges Zeug mit in den Code geschrieben?



  • Wie der Name schon sagt kannst du mit Strukturen dein Programm strukturieren. Du kannst also theoretisch mehrere Variablen mit dem gleichen Bezeichner haben, aber halt in einer anderen Struktur. Wenn du das ganze jetzt nochmal erweiterst und die Uhrzeit mit hineinnimmst, könntest du z.B. m für Minute nehmen (in einer anderen Struktur, die z.B. Zeit heißt). Dadurch entsteht keine so große Verwirrung 😉



  • Außerdem kannst du Strukturen teilweise leichter weiterreichen (ein struct zählt als einzelner Wert und kann deshalb auch per return durchgereicht werden - siehe der Code-Schnipsel in meinem letzten Beitrag).

    PS: Und noch vielseitiger werden struct's, wenn du mit C++ arbeitest 😉



  • CStoll schrieb:

    PS: Und noch vielseitiger werden struct's, wenn du mit C++ arbeitest

    weil man kein 'typedef' braucht?



  • Nein, weil du einem C++-Struct außer Wertelementen auch Bearbeitungsmethoden mitgeben kannst.



  • CStoll schrieb:

    Nein, weil du einem C++-Struct außer Wertelementen auch Bearbeitungsmethoden mitgeben kannst.

    naja, in C macht man eben:

    void bearbeite_meine_struct (meine_struct *x)
    {
      x->... // egal jetzt
    }
    

    ich seh' da keinen grossen vorteil drin wie's c++ macht...



  • Dazu kommt noch Operator-Overloading, die Möglichkeit, eigene Copy-Konstruktoren und Zuweisungsoperatoren mit beliebiger Semantik zu erzeugen, ... (die ganze Palette von C++ halt)

    (bei skalaren Elementtypen hast du ja keine Probleme. Aber wenn du anfängst mit Zeigern zu hantieren, ist das Verwalten des Speichers in C++ wesentlich eleganter zu lösen)

    PS: Sorry, ich wollte jetzt keine Diskussion C vs. C++ anstoßen.



  • CStoll schrieb:

    ... (die ganze Palette von C++ halt)

    du meinst: 'ne menge meist sinnloser overhead 😃

    CStoll schrieb:

    PS: Sorry, ich wollte jetzt keine Diskussion C vs. C++ anstoßen.

    kein problem, es sind nunmal zwei unabhängige sprachen und man einfach nicht allgemein sagen, dass die eine oder andere 'besser' oder 'schlechter' sei...



  • net schrieb:

    CStoll schrieb:

    ... (die ganze Palette von C++ halt)

    du meinst: 'ne menge meist sinnloser overhead 😃

    Overhead? Möglicherweise.
    Sinnlos? Definitiv nicht (schließlich mußt du einer Klasse nur das auf den Weg geben, was sie deiner Meinung nach auch benötigt).



  • CStoll schrieb:

    Sinnlos? Definitiv nicht...

    doch, total sinnlos. was haben konstruktoren, operatorüberladung und der ganze schnickschnack in structs zu suchen? dafür gibts 'class'.



  • net schrieb:

    CStoll schrieb:

    Sinnlos? Definitiv nicht...

    doch, total sinnlos. was haben konstruktoren, operatorüberladung und der ganze schnickschnack in structs zu suchen? dafür gibts 'class'.

    Wenn du der Meinung bist, keinen Ctor etc. zu brauchen, mußt du auch keinen anlegen. (der Vorteil ist, daß du es machen darfst, wenn du es brauchst)



  • Ich bitte euch...



  • CStoll schrieb:

    net schrieb:

    CStoll schrieb:

    Sinnlos? Definitiv nicht...

    doch, total sinnlos. was haben konstruktoren, operatorüberladung und der ganze schnickschnack in structs zu suchen? dafür gibts 'class'.

    Wenn du der Meinung bist, keinen Ctor etc. zu brauchen, mußt du auch keinen anlegen. (der Vorteil ist, daß du es machen darfst, wenn du es brauchst)

    schon klar, aber das konzept der 'structs' in c++ ist mist. eine struct sollte eine zusammenfassung von variablen sein, mehr nicht. wenn c++ keine klassen hätte, könnte man ja irgendwie verstehen, wenn sie structs dafür hergenommen und erweitert hätten. aber so wie's ist, ist es grütze.



  • [quote="net"]

    TactX schrieb:

    Ich bitte euch...

    ok, ich hör ja schon auf zu lästern 😉
    hab deinen beitrag erst gesehen, nachdem ich meinen abschickte...



  • net schrieb:

    schon klar, aber das konzept der 'structs' in c++ ist mist. eine struct sollte eine zusammenfassung von variablen sein, mehr nicht. wenn c++ keine klassen hätte, könnte man ja irgendwie verstehen, wenn sie structs dafür hergenommen und erweitert hätten. aber so wie's ist, ist es grütze.

    OK, über Geschmack lässt sich (nicht?) streiten. Und ich bin halt der Meinung, daß es nützlich ist, C++ Structs aufwerten zu KÖNNEN (wichtig: nicht MÜSSEN).
    Aber es hindert dich natürlich niemand daran, eine struct im C-Sinn zu verwenden.

    TactX schrieb:

    Ich bitte euch...

    Bin ja schon ruhig *verzieht sich ins C++ Board*


Anmelden zum Antworten