2017-06-02 1 views
-2

Als Teil eines Tic-Tac-Toe-Spiels versuche ich einen Char-Vektor zu erstellen, der mit den Zahlen 1-9 gefüllt ist. Warum funktioniert der folgende Code nicht? Dies ist nur eine vereinfachte Version des vollständigen Codes, alles wäre wahrscheinlich ein wenig unhandlich gewesen. Sollte das tun, was ich will? Warum sollte es nicht cout '0'? Es scheint leer zu sein, wenn ich versuche zu zeigen, was drin ist. Habe ich den Vektor falsch aufgefüllt?Wie bestimmte Artikel in Vektor <char> angezeigt werden? (C++)

Ja, ich weiß using namespace std; ist schlecht.

include <iostream> 
include <vector> 

using namespace std; 

int main() { 
    const int NUM_SQUARES = 9; 
    vector<char> board(NUM_SQUARES); 
    cout << board[0] << endl; 
    return 0; 
} 
+0

dieser Code sollte nicht einmal – Ap31

+0

kompilieren @ AP31 Bitte weisen darauf hin, warum . Ist es der Mangel an "Leere", der dich beunruhigt? – byxor

+0

@byxor sollte es jetzt, behoben von dasblinkenlight :) – Ap31

Antwort

2

Ihr Code druckt den Inhalt des ursprünglichen Element des Vektors, so ist es nur eine Frage dessen, was Zeichen, das Sie in diesem Element setzen.

Ihr Code setzt Zeichen Null '\0' dort, die nicht druckbar ist. Wenn Sie möchten, eine Zeichenzahl drucken, legen Sie sie in den Vektor:

vector<char> box(NUM_SQUARES, 'X'); 
cout << board[0] << endl; // prints X 

Demo.

0

Weil Sie es als Zeichen speichern, wie

char c=0; 
std::cout << c; 

würde nichts drucken.

Wenn Sie 0 zeigen möchten, müssen Sie es int heißt std::cout << (int)board[0];

-2

Vektoren sind keine Arrays werfen. Sie müssen nicht vorher Speicherplatz reservieren. Erklären Sie einfach einen leeren Vektor und verwenden Sie dann eine for-Schleife, um den Vektor zu füllen.

Oder noch besser, da Sie genau 9 Elemente benötigen und das wird sich nie ändern, deklarieren Sie einfach ein Zeichen-Array.

+1

Wie ist 'vector :: vector (int)' "nicht überladen"? es ist wahrscheinlich der am meisten missbrauchten Vektor Konstruktor – Ap31

+1

EDIT: Ops, ich sehe es jetzt. Ich werde meine Antwort bearbeiten. –

0

Du eine vector mit einer Anfangszahl von 9, jedoch keine Anfangswerte der Konstruktion, so dass die Zeichen alle auf '\0' (0x00) initialisiert werden, nicht '0' (0x30). Sie müssen die vector füllen, bevor Sie es angezeigt, zum Beispiel:

#include <iostream> 
#include <vector> 

int main() { 
    const int NUM_SQUARES = 9; 
    std::vector<char> board(NUM_SQUARES); 
    for (int i = 0; i < NUM_SQUARES; ++i) 
     board[i] = '0' + i; 
    std::cout << board[0] << std::endl; 
    return 0; 
} 

Oder in C++ 11 und höher:

#include <iostream> 
#include <vector> 
#include <numeric> 

int main() { 
    const int NUM_SQUARES = 9; 
    std::vector<char> board(NUM_SQUARES); 
    std::iota(board.begin(), board.end(), '0'); 
    std::cout << board[0] << std::endl; 
    return 0; 
} 
Verwandte Themen