Problem mit Array



  • Hallo ich habe ein Problem mit einem mehrdimensionales Array, welches ich an eine Funktion übergeben, wo es dann geändert wird. Nach der Enderung soll das Array aber mit den Neuen Daten in der Funktion verfügbar sein, wo ich die Funktion aufgerufen die das Array ändert. Ich hab im Forum schon einiges gelesen zum Thema struct und verctor, aber a die Hälfte sagt mir gar nichts und b gibt es doch sicher einen einfachen Weg den ich nicht kenne.
    Ich habe von C/C++ keine Ahnung, es ist ein Schulproject und dementschprechend sind dann auch meine Kenntnisse in C/C++.

    #include <iostream.h>
    #include <conio.h>
    
    int anzeigen(int i_sitzplaetze[10][20][2], int i_mode = 0){
      for(int i=-1; i<10; i++){
        if(i==-1){printf("         ");}
        else{printf("Reihe%3i:",i+1);}
        for(int j=0; j<20; j++){
          if(i==-1){printf("%3i",j+1);}
          else{
            if(i_mode)i_sitzplaetze[i][j][0]=0;
            printf("%3i",i_sitzplaetze[i][j][0]);
          }
        }
        printf("\n");
      }
      return 0;
    }
    
    int reservieren(int i_sitzplaetze[10][20][2]){
      int i_reihe=0,i_platz,i_anzahl;
      printf("Reservierung:\n");
      printf("Bitte geben Sie eine Reihe ein: ");
      cin >> i_reihe;
      printf("\nBitte geben Sie die Anzahl der zu reservierenden Plaetze ein: ");
      cin >> i_anzahl;
      printf("\nBitte geben Sie den 1. zu reservierenden Platz ein: ");
      cin >> i_platz;
      for(int i=0;i<i_anzahl;i++){
        i_sitzplaetze[i_reihe][i_platz+1][0]=1;
      }
      return i_sitzplaetze;   // hier soll das Array wieder zurück gegeben werden
    }
    
    int main(){
      int i_sitzplaetze[10][20][2];
    
      anzeigen(i_sitzplaetze,1);
      i_sitzplaetze = reservieren(i_sitzplaetze);
      getch();
      return 0;
    }
    

    Kann mir da jemand helfen?

    mfG Net_Hans



  • Hier kannst du nachlesen, wie man arrays an Funktionen übergibt:
    http://de.wikibooks.org/wiki/C-Programmierung:_Arrays_und_Strings

    void anzeigen(int i_sitzplaetze[][20][2], int i_mode = 0);
    
    void reservieren(int i_sitzplaetze[][20][2]);
    


  • die Übergabe an die Funktion geht ja, nur die Rückgabe nicht, ich kann mein bearbeitetes Array nicht an main zurückgeben. Und ich bräuchte eine Idee für eine Rückgabe



  • -Net_Hans- schrieb:

    die Übergabe an die Funktion geht ja, nur die Rückgabe nicht, ich kann mein bearbeitetes Array nicht an main zurückgeben.

    Arrays kann man nicht zurückgeben. Musst du aber auch gar nicht. Array-Funktionsparameter werden nicht kopiert, sind also automatisch "by reference".



  • das heißt ich gebe das Array an die Funktion wo ich es dann bearbeite und dann wird automatisch nach der Abarbeitung der Funktion in der alten Funktion mit den aktuellen werten weitergearbeitet?



  • Ja.



  • ich habe das jetzt mal versucht, aber ich bekomme in der Ausgabe nach dem Bearbeiten es Arrays das ursprüngliche Array ausgegeben

    int reservieren(int i_sitzplaetze[10][20][2]){
      int i_reihe=0,i_platz,i_anzahl;
      printf("Reservierung:\n");
      printf("Bitte geben Sie eine Reihe ein: ");
      cin >> i_reihe;
      printf("\nBitte geben Sie die Anzahl der zu reservierenden Plaetze ein: ");
      cin >> i_anzahl;
      printf("\nBitte geben Sie den 1. zu reservierenden Platz ein: ");
      cin >> i_platz;
      if(ueberpruefung_reihe(i_sitzplaetze, i_reihe, i_platz, i_anzahl)){
        for(int i=0;i<i_anzahl;i++){
          i_sitzplaetze[i_reihe][i_platz+1][0]=1;
        }
      }
      return 0;
    }
    
    int main(){
      int i_sitzplaetze[10][20][2];
    
      anzeigen(i_sitzplaetze,1);
      reservieren(i_sitzplaetze);
      anzeigen(i_sitzplaetze,1);
      getch();
      return 0;
    }
    


  • -Net_Hans- schrieb:

    ich habe das jetzt mal versucht, aber ich bekomme in der Ausgabe nach dem Bearbeiten es Arrays das ursprüngliche Array ausgegeben

    Dann wird der Inhalt des Arrays nicht geändert. Möglicherweise gibt ueberpruefung_reihe false zurück, die Funktion hast du ja nicht gezeigt. Es wäre wohl auch sinnvoll, das Array irgendwo zu initialisieren, sonst steht da irgendwas drin.

    Die Schleife in reservieren ist auch merkwürdig. Der Index wird in der Schleife nicht benutzt, du setzt also mehrfach denselben Eintrag auf 1.



  • SORRY, muß mich verbessern, du hattest Recht, ich hatte bei der Funktion anzeigen ein Parameter zu viel. Es geht danke


Anmelden zum Antworten