Strukturen unter C



  • Variante 1 habe ich versucht. Ich bekam aber ne Fehlermeldung dass "undeklarierte Variablen nicht als Prototyp genutzt werden können".



  • Das liegt dann aber an deinem Code, wonach ich schon gefragt habe.

    Wie sieht denn dein Code aus?



  • Versuch 1:

    #include<stdio.h>
    #include<stdlib.h>
    void DreieckEingabe(Dreieck dreieck);
    
    main(){
    }
    
    void DreieckEingabe(Dreieck dreieck){
    	//Deklaration von Punkt
    	typedef struct StructPunkt{
    		double x;
    		double y;
    	}Punkt;
    
    	//Deklaration von Dreieck
    	typedef struct StructDreieck{
    			Punkt A;
    			Punkt B;
    			Punkt C;
    		}Dreieck;
    }
    

    Fehlermeldung:
    aufg2.c:3: error: expected ‘)’ before ‘dreieck’
    aufg2.c:8: error: expected ‘)’ before ‘dreieck’



  • 😮 Was zum Teufel?

    1. Hast du meine Variante 1 nicht versucht wie man hier sehen kann.
    2. Hast du scheinbar keine Ahnung was du mit den Strukts machen sollst.
    3. Hast du bislang nichts geleisted! Eigenleistung?

    Ich finde das schon beinahe eine Frechheit, nein es ist eine 100%. Ich will/verlange implementation auch wenn diese voller Fehler ist, solange man guten willen und Leistung erkennt hilft man dir sicher gerne. So nicht.

    Edit: Lies ein Buch, informiere dich. Google ist dein Freund.



  • gaaaaaaaaanz langsam lieber User.

    Ich bin gerade deswegen in diesem Forum weil ich es nicht kann bzw. aus EIGENINITIATIVE lernen möchte.

    Wenn du mir helfen möchtest, dann bin ich dir dafür dankbar. Wenn nicht, ist das letzte was ich ein paar Tage vor der Klausur brauche eine Verspottung.

    Danke für deinen ironischen Tipp, den ich nicht wirklich brauche.



  • Ich hoffe das hilft dir...

    #include<stdio.h> 
    #include<stdlib.h> 
    
    //Deklaration von Punkt 
    typedef struct StructPunkt{ 
        double x; 
        double y; 
    }Punkt; 
    
    //Deklaration von Dreieck 
    typedef struct StructDreieck{ 
        Punkt pt[3]; 
    }Dreieck; 
    
    int main()
    { 
    	Dreieck dreieck;
    	char c = 'A';
    	int i;
    	Punkt tmp;
    
    	for(i = 0; i < 3; ++i)
    	{
    		printf("Geben Sie Punkt %c an:\n", c++);
    		scanf("%lf %lf", &tmp.x, &tmp.y);
    
    		dreieck.pt[i] = tmp;
    	}
    
    	c = 'A';
    	i = 0;
    	printf("\n\nDreieck hat folgende Punkte: \n");
    
    	for(i = 0; i < 3; ++i)
    	{
    		printf("Punkt %c x: %lf\nPunkt %c y: %lf\n", c, dreieck.pt[i].x, c, dreieck.pt[i].y);
    		c++;
    	}
    
    	return 0;
    }
    

    Edit: Ironische Tipps sind leider genau das was du brauchst. Ich denke du bekommst das mit den Funktionen selbst hin. Den Prototyp habe ich dir ja auch schon genannt. Und ich finde das diese 20 Zeilen hätten von dir kommen können. Das solltest du schon mal gesehen haben.



  • Hallo,

    Das Modell der Strukturen und die des Übergebens per call-by-reference ist mir vollkommen klar. Ich habe einen Programmcode für die Lösung der Aufgabe schon im Kopf. Nur fehlt mir die nötige Syntax dazu.

    Es ist ja auch so dass ich der beste Dichter sein kann, es mir aber nichts bringt, wenn die Person vor mir meine Sprache nicht spricht.



  • Dann bekommst du es halt noch mit Übergabe:

    #include<stdio.h> 
    
    //Deklaration von Punkt 
    typedef struct StructPunkt{ 
        double x; 
        double y; 
    }Punkt; 
    
    //Deklaration von Dreieck 
    typedef struct StructDreieck{ 
        Punkt pt[3]; 
    }Dreieck; 
    
    void eingabe(Dreieck *dreieck)
    {
    	Punkt tmp;
    	char c = 'A'; 
    	int i;
    
    	for(i = 0; i < 3; ++i) 
        { 
            printf("Geben Sie Punkt %c an:\n", c++); 
            scanf("%lf %lf", &tmp.x, &tmp.y); 
    
            dreieck->pt[i] = tmp; 
        }
    }
    
    void ausgabe(Dreieck *dreieck)
    {
    	char c = 'A'; 
    	int i;
    
    	printf("\nDreieck hat folgende Punkte: \n"); 
    
        for(i = 0; i < 3; ++i) 
        { 
            printf("Punkt %c x: %lf\nPunkt %c y: %lf\n", c, dreieck->pt[i].x, c, dreieck->pt[i].y); 
            ++c; 
        } 
    }
    
    int main() 
    { 
        Dreieck dreieck; 
    
    	eingabe(&dreieck);
    	ausgabe(&dreieck);
    
        return 0; 
    }
    


  • HighLigerBiMBam schrieb:

    Ich hoffe das hilft dir...

    Glaube ich kaum, solchen Code sollte man sich nicht als Beispiel nehmen:

    c = 'A';
        i = 0;
        printf("\n\nDreieck hat folgende Punkte: \n");
    
        for(i = 0; i < 3; ++i)
        {
            printf("Punkt %c x: %lf\nPunkt %c y: %lf\n", c, dreieck.pt[i].x, c, dreieck.pt[i].y);
            c++;
        }
    

    Klarer wäre so etwas:

    printf("\n\nDreieck hat folgende Punkte:\n");
        for (i = 0, c = 'A'; i < 3; ++i, ++c) {
            printf ("Punkt %c x: %lf\nPunkt %1$c y: %lf\n", c, dreieck.pt[i].x, dreieck.pt[i].y);
        }
    

    Anderer Ausschnitt:

    char c = 'A';
        ...
        for(i = 0; i < 3; ++i)
        {
            printf("Geben Sie Punkt %c an:\n", c++);
            scanf("%lf %lf", &tmp.x, &tmp.y);
    
            dreieck.pt[i] = tmp;
        }
    

    Klarer:

    for (i = 0, c = 'A'; i < 3; ++i, ++c) {
            printf ("Geben Sie Punkt %c an:\n", c);
            scanf ("%lf %lf", &dreieck.pt[i].x, &dreieck.pt[i].y);
        }
    

    Beäuge lieber misstrauisch vorgelöste Aufgaben,
    es gibt sie doch, diejen'gen Knaben,
    die nur glauben, dass sie haben,
    wunderbare Dichtergaben.



  • Sehr weltbewegend... Danke für nichts. @ ihdhd

    Du bist der Beste.



  • Hallo,

    Ich bin eifrig am probieren und habe auch so einiges verstehen können..
    Dank den Programmcodes, die ihr mir gegeben habt, wird mir einiges deutlicher. Danke euch...

    Nur habe ich eine Frage. In dem untrigen Code habe ich in der Funktion ein Einlesevorgang(wie gesagt, ich bin noch am probieren).

    Obwohl ich bei der Funktion scanf nur einmal %lf stehen habe, muss ich 2 Werte eingeben, damit der restliche Teil des Programmcodes abgearbeitet wird. Aber es wird nichts in die nächste Variable gespeichert, nur eingegeben. Wenn ich zwei %lf mache, kann ich plötzlich 3 Eingaben machen.

    Woran liegt das?

    #include<stdio.h>
    #include<stdlib.h>
    
    //Deklaration von Punkt
    typedef struct StructPunkt{
        double x;
        double y;
    }Punkt;
    
    //Deklaration von Dreieck
    typedef struct StructDreieck{
        Punkt A;
        Punkt B;
        Punkt C;
    }Dreieck;
    
    void DreieckEinlesen(Dreieck*);
    
    int main(){
      Dreieck Eingabe;
      DreieckEinlesen(&Eingabe);
    
        printf("A(x) = %lf; A(y) = %lf\n",Eingabe.A.x, Eingabe.A.y);
        printf("B(x) = %lf; B(y) = %lf\n",Eingabe.B.x, Eingabe.B.y);
        printf("C(x) = %lf; C(y) = %lf\n",Eingabe.C.x, Eingabe.C.y);
    }
    
    void DreieckEinlesen(Dreieck *Eingabe){
    
    	printf("Bitte Punkt A(x) und A(y) eingeben:\n");
    	scanf("%lf%lf\n", &(Eingabe->A.x), &(Eingabe->A.y));
    
    	printf("Bitte Punkt B(x) und B(y) eingeben:\n");
    	scanf("%lf%lf\n", &(Eingabe->B.x), &(Eingabe->B.y));
    
    	printf("Bitte Punkt C(x) und C(y) eingeben:\n");
    	scanf("%lf%lf\n", &(Eingabe->C.x), &(Eingabe->C.y));
    
    }
    

    EDIT:

    Ich habe den obrigen Code auf mehrere Eingaben bzw. Ausgaben erweitert. Es geschehen sehr komische Dinge. Unzwar ist die erste Eingabe 3 mal, obwohl nur 2 vorgesehen sind. Die zweite und dritte Eingabe sind hingegen nur 2.

    Nun wird aber der dritte Wert von der ersten Eingabe in B(x) gespeichert und der Wert, der für B(x) eingegeben wird, wird in B(y) gespeichert usw..

    woran liegt das?



  • Da ist wohl noch das '\n' im Buffer, das scanf nicht ausliest.

    Viel beheben das mit fflush(stdin); was undefiniertes Verhalten zeigen kann.
    Dazu gibt es hier viiiiiele Beiträge.

    Schau mal hier: http://www.c-plusplus.net/forum/viewtopic.php?t=39349
    Nach jedem scanf diese while-Schleife



  • Hey,

    mit der while-Schleife kann ich plötzlich bei allen scanf-Aufrufen 3 Eingaben machen.



  • Ein Leerzeichen zwischen deinen %lf wäre nicht schlecht, damit scanf weiß wann die 1. Zahl aufhört.

    scanf("%lf %lf\n", &(Eingabe->A.x), &(Eingabe->A.y));
    


  • Hey,

    das Problem besteht dennoch.



  • Nimm doch mal das \n bei scanf raus

    scanf("%lf %lf", &(Eingabe->A.x), &(Eingabe->A.y));



  • DirkB schrieb:

    Ein Leerzeichen zwischen deinen %lf wäre nicht schlecht, damit scanf weiß wann die 1. Zahl aufhört.

    scanf("%lf %lf\n", &(Eingabe->A.x), &(Eingabe->A.y));
    

    Unsinn. *scanf weiß allein, wo ein double aufhört. Das Leerzeichen in redundant.

    if( 2==scanf("%lf%lf",&Eingabe->A.x,&Eingabe->A.y) )
      printf("%lf %lf",Eingabe->A.x,Eingabe->A.y);
    else
      puts("fehlerhafte Eingabe");
    while( getchar()!='\n' );
    


  • DirkB schrieb:

    Nimm doch mal das \n bei scanf raus

    scanf("%lf %lf", &(Eingabe->A.x), &(Eingabe->A.y));

    daran lags! Wie dumm von mir..


Anmelden zum Antworten