Array deklarieren ! Compiler-Fehler



  • Hallo,

    wieso kann ich eigentlich ein array nicht in einer if abfrage deklarieren ich versteh das nicht guckt euch mal meinen quelltext an:
    die initialisierung des arrays stimmt habs hier aber mal mit ... abgekürzt

    #include<stdio.h>
    #include<stdlib.h>
    
    int main ( )
    {
        int level = 1;
    
        if(level==1)
        {
        char feld[4][4]={{'a'..........},
    .....
    

    ich erhalte immer den fehler :
    "Undeclared identifier 'feld'" wenn ich es später benutze !

    unzwar möchte ich je nach eingabe mein array anders haben also wieso funktioniert das nicht ?



  • Das Array ist nur innerhalb des Blocks sichtbar, in dem es deklariert wird. Genauso wie wenn du folgendes hast:

    if ( something )
    {
        int i = 3;
    }
    // Hier ist i nicht mehr sichtbar
    

    *Edit
    Zur Loesung: Das heisst du deklarierst das Array vor den if-Statements und initialisierst es dann in den if-Statements.



  • aha und so ist es dann möglich ? also ich kann ja in der ifabfrage dem array einen wert geben oder ?

    char[9][9];
    int level=1;

    if level ==1)
    {
    feld[9][9]={.........}
    }



  • Nein!

    Mit feld{9]{9] ist ein Element gemeint. Da die Indizes bei dir aber nur von 0 bis 8 gehen, existiert das noch nicht einmal.



  • Nein.
    Initialisieren mit {} kannst du nur (einmal) bei der Definition.
    Du kannst aber explizite Füllaktionen benutzen,

    char a[4][4]={0}; /* alles 0 */
    
    if( i==1 )
    {
      a[0][0]=1;
      ...
    }
    else
    if( i==2 )
    {
      a[0][0]=2;
      ...
    }
    usw.
    


  • also konkret geht es um ein sudoku spiel und der spiler soll wählen können welche schwierigkeitsstufe er möchte und jenachdem was er wählt bekommt er ein anderes vorgegebenes! feld
    also reicht es mir nicht nur einzelne werte zu ändern kann ich den spieler nicht irgentwie entscheiden lassen welches feld er verwendet ?



  • Wie viele Spielfelder willst du da denn ablegen?

    Du musst die per Zufall generieren und dann (je nach Schwierigkeit) mehr oder weniger Felder löschen. (aber in einer Kopie, das Ergebnis brauchst du noch)



  • ich wollte 3 felder vorgeben halt leicht-mittel-schwer
    das muss doch irgendwie funktionierenn oder O.o : )



  • Eine Möglichkeit ist ein Zeiger auf Array:

    char feld_leicht[4][4] = { ... };
    char feld_mittel[4][4] = { ... };
    char feld_schwer[4][4] = { ... };
    char (*feld)[4];
    
    if(leicht) {
      feld = feld_leicht;
    } else if(mittel) {
      feld = feld_mittel;
    } else {
      feld = feld_schwer;
    }
    

    Auch möglich ist natürlich, aus mehreren Vorlagen nach Bedarf zu kopieren:

    char feld_leicht[4][4] = { ... };
    char feld_mittel[4][4] = { ... };
    char feld_schwer[4][4] = { ... };
    char feld[4][4];
    
    if(leicht) {
      memcpy(feld, feld_leicht, sizeof(feld));
    } else if(mittel) {
      memcpy(feld, feld_mittel, sizeof(feld));
    } else {
      memcpy(feld, feld_schwer, sizeof(feld));
    }
    

    Ebenfalls denkbar wäre ein Array von Feldern:

    enum { LEICHT, MITTEL, SCHWER };
    
    char feld[3][4][4] = { 
      { {  leichtes feld hier } },
      { { mittleres feld hier } },
      { {  schweres feld hier } }
    };
    
    int level = MITTEL;
    
    /* Dann später statt feld[x][y] */
    feld[level][x][y];
    

    Es gibt da eine ganze Reihe von Möglichkeiten. Such bzw. denk dir eine aus.


Anmelden zum Antworten