2017-06-05 5 views
0

Ich lerne gerade C, und ich habe gerade einen Entwurf eines Programms geschrieben, das es einem Benutzer erlaubt, einen Spieler in einem zeichenbasierten Labyrinth/Pfad zu bewegen. Ich habe den Labyrinth/Pfad als multidimensionales Zeichen-Array gebaut, mit einer while-Schleife, die die Position des Spielers durch Ersetzen bestimmter Zeichen im Array kontrolliert. Hier ist die mehrdimensionale Array I initialisiert haben:C Multidimensionales Array: Fehle ich etwas?

char maze[5][7] = { 
    {"_", "_", "_", "_", "_"}, 
    {"|", " ", " ", " ", "|"}, 
    {"|", " ", "|", " ", "|"}, 
    {"|", " ", "|", "_", "|"}, 
    {"|", "_", " ", " ", "|"}, 
    {"|", " ", "|", " ", "|"}, 
    {"|", "_", "_", "_", "|"} 
}; 

Allerdings, wenn ich zu kompilieren versuchen, ich diesen Fehler:

error: '}' expected 

Die erste Reihe in dem Array ist offenbar eine Art von Schließbügel fehlt , obwohl ich die richtige Array-Syntax mehrmals überprüft habe und dies scheint korrekt zu sein. Was vermisse ich? Gibt es andere Probleme damit?

+1

"|" ist ein Zeichenfolgenliteral, das über Zeichenarraytyp verfügt. '|' ist ein Zeichenliteral, das char enthält. Sie müssen Zeichenliterale verwenden, um Ihr Array anstelle von Stringliteralen zu initialisieren. Und das Array sollte wie char labyrinth [7] [5] deklariert werden, dh es hat 7 "Zeilen" mit 5 " Spalten " –

+1

Zuerst haben Sie die Dimensionen falsch. Dann haben Sie ein Array von Arrays von * Zeichen * nicht Strings. Schließlich hat C nicht" mehrdimensionale Arrays ", es gibt nur Arrays von Arrays (von Arrays. .. –

+1

C Arrays sind ** Zeile Major **. Also ist Ihr Initialisierer von der falschen Größe, sowie Art. – StoryTeller

Antwort

0

Sie geben dem Array falsche Dimensionen maze[5][7] es ist Zeile und Spalte und Sie definieren 7rows und 5 Spalten. Und Sie betreten jedes Element als eine Zeichenfolge. Es sollte ein Zeichen sein, das in einem einfachen Zitat wie diesem 'a' gegeben wird. Wenn Sie im doppelten Anführungszeichen definieren, wird es eine Zeichenkette. Dadurch wird Ihr Problem

char maze[7][5] = { 
{'_', '_', '_', '_', '_'}, 
{'|', ' ', ' ', ' ', '|'}, 
{'|', ' ', '|', ' ', '|'}, 
{'|', ' ', '|', '_', '|'}, 
{'|', '_', ' ', ' ', '|'}, 
{'|', ' ', '|', ' ', '|'}, 
{'|', '_', '_', '_', '|'} 
}; 

Hoffnung lösen, das hilft :)

+0

Bessere Antwort wäre, ihm zu erklären, warum Sie das getan haben und warum sein Code ist falsch – tilz0R

+0

Ich denke, die Kommentare bereits getan, dass –

+1

@ VishwajeetVishu eine gute Antwort ist in sich abgeschlossen, aber Sie können natürlich vorhandene Kommentare beziehen. –

2

Ihr Array vom Typ ist char, aber Ihre Eingaben sind vom Typ char *. Ersetzen Sie doppelte Anführungszeichen " durch einfache Anführungszeichen '.

Einfache Anführungszeichen stehen für char selbst, wobei doppelte Anführungszeichen die Zeichenfolge (Zeichenfolge) darstellen, daher versucht der Compiler, \0 Zeichen an das Ende hinzuzufügen.

Auf der anderen Seite müssen Sie die Werte 5 und 7 für die Initialisierung tauschen.

End Ergebnis ist ähnlich wie folgt aus:..

//7 big entries with 5 values 
char maze[7][5] = { 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
}; 
0

Sie müssen ersetzen "mit", weil ein Zeichen ein einzelnes Zeichen ist Das zweite Problem ist, dass Sie die Länge falsch zuweisen

Ersetzen Sie die erste durch die zweite Länge

char maze[7][5] = { 
    {'_', '_', '_', '_', '_'}, 
    {'|', ' ', ' ', ' ', '|'}, 
    {'|', ' ', '|', ' ', '|'}, 
    {'|', ' ', '|', '_', '|'}, 
    {'|', '_', ' ', ' ', '|'}, 
    {'|', ' ', '|', ' ', '|'}, 
    {'|', '_', '_', '_', '|'} 
}; 
Verwandte Themen