1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

C: Problem mit Strukturen

Discussion in 'Programmieren' started by ProXtLiner, Jan 5, 2004.

Thread Status:
Not open for further replies.
  1. ProXtLiner

    ProXtLiner Byte

    Hi @ll!

    Habe folgendes Problem: Muss ein Programm schreiben, das die Fläche zwischen 3 Punkten berechnet. Dabei muss ich struct ... benutzen und eine Funktion für die Eingabe der Koordinaten (x,y,z) schreiben. Als Rückgabewert muss es ebenfalls eine struct ... -Variable sein. Und jetzt zum Problem:

    Hier ist das fertige Stück:

    ----main.c----
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>

    struct koordinaten
    {
    float x_koor;
    float y_koor;
    float z_koor;
    };

    int main()
    {
    struct koordinaten point1;
    struct koordinaten point2;
    struct koordinaten point3;

    point1=eingabe(...........); Hier in der Klammer ist das Problem, wenn ich hier (normalerweise irgendeine Variable eingebe, steht incompatibles Typ der Aufgabe oder so(eng)

    system("PAUSE");
    return 0;
    }


    und
    ------------eingabe.c-----------
    struct koordinaten eingabe(struct koordinaten i)
    {
    printf("Flächenberechnung\n");
    printf("------------------------");

    printf("Geben Sie die X-Koordinate ein: \n");
    scanf("%d",&i.x_koor);
    printf("Geben Sie die Y-Koordinate ein: \n");
    scanf("%d",&i.y_koor);
    printf("Geben Sie die Z-Koordinate ein: \n");
    scanf("%d",&i.z_koor);

    return i;
    }

    Wenn es jemanden interessiert, bitte probiert es aus und sagt, wo der Fehler ist. :bet:

    Danke!
    :motz: :) :motz:
     
  2. Kokomiko

    Kokomiko Guest

    Klar, aber das hat mit dem Problem wenig zu tun. ;)
     
  3. specialist7

    specialist7 Kbyte

    ginge mit c++ nicht auch:

    struct yxs var;

    cin >> var.koord_x;

    :eek: :D
     
  4. Kokomiko

    Kokomiko Guest

    Standard C oder C++?

    Generell mußt Du entweder eine Referenz auf die zu füllende struct übergeben, oder eine Referenz auf eine gefüllte Referenz zurückgeben.

    1. Standard C

    entweder
    Code:
    struct koordinaten *eingabe()
    {
    static struct koordinaten i;
    printf("Flächenberechnung\n");
    printf("------------------------");
    
    printf("Geben Sie die X-Koordinate ein: \n");
    scanf("%d",&i.x_koor);
    printf("Geben Sie die Y-Koordinate ein: \n");
    scanf("%d",&i.y_koor);
    printf("Geben Sie die Z-Koordinate ein: \n");
    scanf("%d",&i.z_koor);
    
    return &i;
    }
    Aufruf:
    Code:
    memcpy (&point1, eingabe(), sizeof (point1));
    oder
    Code:
    struct koordinaten *eingabe(struct koordinaten *i)
    {
    printf("Flächenberechnung\n");
    printf("------------------------");
    
    printf("Geben Sie die X-Koordinate ein: \n");
    scanf("%d",&i->x_koor);
    printf("Geben Sie die Y-Koordinate ein: \n");
    scanf("%d",&i->y_koor);
    printf("Geben Sie die Z-Koordinate ein: \n");
    scanf("%d",&i->z_koor);
    
    return i;
    }
    Aufruf:
    Code:
    eingabe (&point1);
    In diesem Fall ist das Funktionsergebnis eigentlich doppelt gemoppelt.

    In C++ könntest Du auch schreiben:
    Code:
    void eingabe(struct koordinaten& i)
    {
    printf("Flächenberechnung\n");
    printf("------------------------");
    
    printf("Geben Sie die X-Koordinate ein: \n");
    scanf("%d",&i.x_koor);
    printf("Geben Sie die Y-Koordinate ein: \n");
    scanf("%d",&i.y_koor);
    printf("Geben Sie die Z-Koordinate ein: \n");
    scanf("%d",&i.z_koor);
    }
    Aufruf:
    Code:
    eingabe (point1);
    Dahinter steckt, daß C(++) anders als Pascal keine Werte als Funktionsergebnis zurückgeben kann, sondern nur Referenzen (Pointer). Du mußt also entweder die Adresse der initialisierenden Variable übergeben, oder die Adresse einer statischen lokalen Variablen zurückgeben, die in der Funktion initialisiert wird.
     
Thread Status:
Not open for further replies.

Share This Page