2017-06-02 1 views
-2

Tic-Tac-Toeゲームの一環として、私は数字1-9で満たされたcharベクトルを作成しようとしています。なぜ次のコードは機能しませんか?これは完全なコードを単純化したものにすぎず、おそらくすべてが扱いにくいでしょう。これで私はそれをしたいのですか?なぜそれはcout '0'なのでしょうか?私は何かを表示しようとすると空であるようです。私はベクトルに間違った値を設定しましたか?ベクトルの特定のアイテムを表示するには<char>? (C++)

はい、私はusing namespace std;が悪いことを知っています。

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

このコードはさえAP31 @ – Ap31

+0

をコンパイルしてはならない理由を指摘してください。あなたに心配している「無効」の欠如ですか? – byxor

+0

@byxorこれはdasblinkenlightで修正されました:) – Ap31

答えて

2

あなたのコードは、ベクトルの最初の要素の内容を出力します。したがって、それはあなたがその要素に入れた文字の問題です。

あなたのコードでは、文字ゼロが'\0'になります。これは印刷できません。あなたは文字の数字を印刷したい場合は、ベクターにそれを置く:

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

Demo.

0

をあなたはcharとしてそれを格納するので、ちょうど

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

のように何も印刷されないでしょう。

あなたが0を表示したい場合は、すなわちstd::cout << (int)board[0];

-2

ベクターは配列ではありませんintにキャストする必要があります。あらかじめメモリスペースを確保する必要はありません。空のベクトルを宣言してから、forループを使って前記ベクトルを設定してください。

また、正確には9個の要素が必要であり、決して変更するつもりはないので、文字配列を宣言するだけです。

+1

'vector :: vector(int)'はどのように「オーバーロードされていませんか」ですか?それはおそらく最も虐待されたベクトルコンストラクタです – Ap31

+1

編集:オプス、私は今それを参照してください。私は私の答えを編集します。 –

0

初期カウントが9ですが、初期値がないので、文字はすべて'\0'(0x00)に初期化され、'0'(0x30)には初期化されていません。あなたは、例えば、あなたがそれを表示する前にvectorを移入する必要があります。

C++ 11以降で
#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; 
} 

または、:

#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; 
} 
関連する問題