C: Problem mit Strukturen

Dieses Thema im Forum "Programmieren" wurde erstellt von ProXtLiner, 5. Januar 2004.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. ProXtLiner

    ProXtLiner Byte

    Registriert seit:
    20. Dezember 2003
    Beiträge:
    54
    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

    Registriert seit:
    29. Juli 2002
    Beiträge:
    490
    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.
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen