2016-05-21 19 views
0

Ich bin nicht gut in C-Programmierung. Ich brauche einige Eingaben, wie man eine Variable zu Structure hinzufügen kann, die auf die Strukturvariablen zeigt. Ich bin mir nicht sicher, ob dieser Satz für Sie einen Sinn ergibt. Ich werde versuchen, es zu erklären.
Meine Struktur sieht aus wie (Dies ist die Struktur für String-Labyrinth Daten ist):
Hinzufügen von Variablen zu einer Struktur in C

struct maze { 
    char ** mazeValue; 
    int startx, starty; 
    int numrows, numcolumns; 
    int initdir; 
}; 

Hier starty Reihe in Labyrinth darstellt und startx darstellt Spalte in Labyrinth.
Während ich durch das Labyrinth schlendere, um den Weg zu finden, muss ich jeder Bewegung Kosten zuweisen. Also, wenn ich bei [0][2] starte und zu [1][2] gehe, muss ich dem Standort [1] [2] und so weiter Kosten 1 zuweisen. Wie kann ich dies erreichen, indem ich die richtigen Kosten für den richtigen Standort speichere? Wie kann ich dazu eine Variable zu meiner struct hinzufügen, so dass ich beim Drucken der Labyrinthausgabe auch die Kosten für diesen Pfad ausgeben kann.

+1

Das Labyrinth in Ihrer Struktur ist ein 2-dimensionales Array von Zeichen: 'char ** mazeValue'. Das muss eine zweidimensionale Anordnung von Strukturen sein, so dass Sie mehr Informationen über jeden Ort im Labyrinth speichern können. – user3386109

+0

@ user3386109 - Können Sie es bitte mehr ausarbeiten? Ich bin in C. nicht sehr vertraut. – user6344678

+0

Wie sieht 'mazeValue' aus? Wenn es z. B. 0 für blockiert und 1 für kostenlos gibt, könnten Sie den Rest der Werte als Kosten verwenden und Ihre "struct" unverändert lassen, außer vielleicht einen größeren Typ (obwohl ich das 'char **' ändern würde zu 'char *' und mache die Indizierung selbst, also hast du statt m-> mazeValue [i] [j] '' m-> mazeValue [i * m-> numcolumns + j] '). – a3f

Antwort

-1

Ich hoffe, der folgende Beispielcode ist hilfreich für Sie.

#include <stdio.h> 

#define MAX_ROWS 4 
#define MAX_COLUMS 5 

struct maze { 
    char *mazeValue; 
    int startx, starty; 
    int numrows, numcolumns; 
    int initdir; 
}; 

int main(int argc, char const *argv[]) 
{ 
    /* code */ 
    struct maze m; 
    char aMazeValue[MAX_ROWS][MAX_COLUMS] = {0}; 

    m.mazeValue = &aMazeValue[0][0]; 

    aMazeValue[0][1] = 1; 
    aMazeValue[3][2] = 1; 

    printf("aMazeValue[0][1] = %d\n", *(m.mazeValue + 1)); 
    printf("aMazeValue[3][2] = %d\n", *(m.mazeValue + 3 * MAX_COLUMS +2)); 

    printf("aMazeValue[2][3] = %d\n", aMazeValue[2][3]); 
    *(m.mazeValue + 2 * MAX_COLUMS + 3) = 1; 
    printf("aMazeValue[2][3] = %d\n", aMazeValue[2][3]); 

    return 0; 
} 
+0

Das OP möchte eine Möglichkeit, Kosten zu speichern, die mit jedem Ort im Labyrinth verbunden sind. –

1

Wie @ user3386109 schlägt vor, in den Kommentaren:

Das Labyrinth in Ihrer Struktur ist ein 2-dimensionales Array von Zeichen: char ** mazeValue. Das muss eine zweidimensionale Anordnung von Strukturen sein, so dass Sie mehr Informationen über jeden Ort im Labyrinth speichern können.

Sie müssen also eine andere Struktur erstellen, um mehr Informationen über jeden Ort im Labyrinth zu speichern.

Like:

struct slot 
{ 
char mazeValue; 
int cost; 
}; 

Und dann die Art der mazeValue in Ihrer ursprünglichen ändern struct-slot wie:

struct maze 
{ 
struct slot ** maze; 
int startx, starty; 
int numrows, numcolumns; 
int initdir; 
}; 

Jetzt können Sie die mazeValue und cost für den Schlitz an der Stelle zugreifen [1][2] wie :

maze[1][2].cost = //whatever; 

und ähnlich:

maze[1][2].mazeValue = //whatever; 
+0

Danke, ich versuche das. – user6344678

+0

@ user6344678 Hat dies Ihr Problem gelöst? –

+0

@ user6344678 Was ist anders als meine Antwort? – granmirupa

Verwandte Themen