Wohnungsplanung mit Zeigern



  • Ich soll ein Programm schreiben mit dem man die Daten für eine Wohnung eingeben kann.
    Also die Breite und Länge von jedem Zimmer soll eingebbar sein und man soll nach der gesamten Eingabe aller Daten immer noch Zugriff auf alle Daten der einzelnen Zimmer haben. Wie realisiere ich das am besten mit Zeigern und Zeiger-Zeiger, die ich benutzen soll.

    Ein Anfang ist schon getan:

    #include <stdio.h>
    #include <malloc.h>
    #include <conio.h>
    
    /* Das Ziel ist es bei diesem Programm darauf zu kommen, wie man
    die einzelnen Wohnungen mit ihren Daten ansprechen kann */
    int main(int argc, char* argv[])
    {
      int **piZimmer;
      int *piZimmerdaten = (int*)malloc(sizeof(int)*3);
      int Laenge, Breite, Flaeche, i, zimmeranzahl;
    
      printf("Wieviele Zimmer soll ihre Wohnung denn haben ?\n");
      scanf("%d", &zimmeranzahl);
    
      piZimmer = (int**)malloc(sizeof(int*)*zimmeranzahl);
    
      for (i = 0; i < zimmeranzahl; i++)
      {
        printf("%s%d%s", "Bitte geben sie die Laenge und Breite fuer das ", i+1,". Zimmer ein: \n");
        printf("Bitte Laenge eingeben: ");
        scanf("%d", &Laenge);
        printf("Bitte Breite eingeben: ");
        scanf("%d", &Breite);
        *(piZimmerdaten) = Laenge;
        *(piZimmerdaten+1) = Breite;
        Flaeche = Laenge * Breite;
        *(piZimmerdaten+2) = Flaeche;
    ....
    

    Das Programm ist noch nicht komplett... Vielleicht habt ihr einige Lösungsansätze 😉



    1. erstelle eine struktur zB
    typedef struct Zimmer
    {
       int laenge;
       int breite;
       char name[45];
    } ZIMMER;
    
    1. willst du die Daten dynamisch verwalten?


  • Jap ich will die Daten dynamisch verwalten... Das ist auf jeden Fall besser 😉

    Bedenke ich soll Zeiger-Zeiger verwenden, da ich diese Zeiger-Zeiger für die Zimmer benutzen soll, dass ich sie ansprechen kann und die Zeiger sollen die Daten der einzelnen Zimmer enthalten.

    Aber Struktur find ich persönlich auch besser..



  • du kannst ein structurearray IMHO schon verwenden.
    auf ein array kannst du ja auch mit zeiger-auf-zeiger zugreifen. oder nicht? wenn die so blöde beispiele geben 🙂

    hth,
    ciao



  • Also hier hab ich schon mal ein kleinen Teil des Programms:

    for(i = 0; i < zimmeranzahl; i++)
      {
        printf("Bitte geben sie Breite des Zimmers ein: ");
        scanf("%d", eingabebreite);
        Zimmerdaten[i]->breite = *eingabebreite;
    
        printf("Bitte geben sie die Laenge des Zimmers ein: ");
        scanf("%d", eingabelaenge);
        Zimmerdaten[i]->laenge = *eingabelaenge;
    
        *eingabeflaeche = *eingabebreite * *eingabelaenge;
        Zimmerdaten[i]->flaeche = *eingabeflaeche;
        printf("Die Flaeche des eben eingegebenen Zimmers betraegt : %d %s %d %s %d\n", Zimmerdaten[i]->breite, " * ", Zimmerdaten[i]->laenge, " = ", Zimmerdaten[i]->flaeche);
      }
    
      /* Ausgabe aller Flaechenwerte mit einer for-Schleife */
      for (i = 0; i < zimmeranzahl; i++)
      {
        printf("Die Flaeche des eben eingegebenen Zimmers betraegt : %d %s %d %s %d\n", Zimmerdaten[i]->breite, " * ", Zimmerdaten[i]->laenge, " = ", Zimmerdaten[i]->flaeche);
      }
    }
    

    Aber nun gibts an der Stelle, wenn ich das dritte Zimmer eingeben will einen Speicherfehler.... ? Weiß einer warum das so ist ?
    Ich speichere so:

    /* Speicherreservierung */
      eingabebreite = (int *)malloc(sizeof(int));
      eingabelaenge = (int *)malloc(sizeof(int));
      eingabeflaeche = (int *)malloc(sizeof(int));
    


  • hi!

    machs mal ohne int zeiger.
    dafür scanf("%d", &myInt);

    hth,
    ciao



  • So da Zimmerdaten auch ein Zeiger war und ich dafür keinen Speicher allokiert hatte, musste es ja zwangsläufig zu einem Fehler im Programm kommen 😉

    Jetzt geht alles soweit und ich mach nochmal eine Testphase, in der ich mal ein bißchen herumtesten werde.


Log in to reply