Sudoko Löser und das zweidimensionale Array



  • Hallo!
    Ich versuche mir derzeit die Sache mit den Zeigern beizubringen. Da ich absoluter C-Dummie bin, ist das jetzt auch etwas problematisch geworden. Bei einem Sudoku Löser möchte ich einen Zeiger auf ein zweidimensionales Array übergeben. Hier mal die Main und meine Methode zur Ausgabe per Printf:

    #include <stdio.h>

    void printarray(int** matrix);
    int** solve(int** matrix,int row, int col);
    int valid(int** matrix, int row, int col, int i);

    int main(void){

    int matrix[9][9];
    int row=0;
    int col=0;
    int ziffer;
    while((ziffer =getchar())!=EOF){ /*wirde gepiped von Komandozeile*/
    if(ziffer>='0'&&ziffer<='9'){
    matrix[row][col]=ziffer-'0';
    col++;
    if(col==9){
    col=0;
    row++;
    }
    }
    }
    printarray((int**)matrix);
    return 0;
    }

    void printarray(int **matrix){
    int i,j;
    for(i=0;i<9;i++){
    for(j=0;j<9;j++){
    printf("%2d",matrix[i][j]);
    }
    printf("\n");
    }
    }

    So funktioniert der Methodenaufruf nicht. Falls mir jemand helfen kann, bitte etwas verständlich, da ich auch sämtliche Zeiger Erklärungen im Inet nicht verstehe.

    Danke Euch! 🙂



  • Hallo Chris,

    das sieht gar nicht mal so schlecht aus, du hast nur einen Fehler
    gemacht: du definierst mit "int matrix[9][9]" ein zwei dimensionales Array.
    Mit int ** übergibst du aber einen Zeiger auf int *. Nun möchtest du mit
    matrix[i][j] auf das Element in Zeile i und Spalte j zugreifen. Der Compiler
    weiß jetzt aber nicht, wieviele Elements es in einer Zeile gibt, somit gibt
    es dann einen Absturz.

    Versuchs mal so:

    #include <stdio.h>
    
    void
    printarray(int matrix[][9])
    {
        int i,j;
    
        for(i=0; i<9; i++) {
            for(j=0; j<9; j++) {
                printf("%2d",matrix[i][j]);
            }
            printf("\n");
        }
    }
    
    int main(void){
        int matrix[9][9];
        int row=0;
        int col=0;
        int ziffer;
    
        while((ziffer =getchar())!=EOF) { /*wirde gepiped von Komandozeile*/
            if(ziffer>='0'&&ziffer<='9'){
                matrix[row][col]=ziffer-'0';
                col++;
                if(col==9){
                    col=0;
                    row++;
                }
            }
        }
    
        printarray(matrix);
        return 0;
    }
    

    Gruß mcr


Log in to reply