2017-06-02 48 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

+0

@ Ap31請指出爲什麼。是否缺乏讓你擔心的「空白」? – 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,你需要將其轉換爲intstd::cout << (int)board[0];

-2

向量不是陣列。事先不需要預留存儲空間。只需聲明一個空向量,然後使用for循環來填充所述向量。

或者,更好的是,由於您只需要9個元素,而且永遠不會改變,只需聲明一個字符數組即可。

+1

'vector :: vector(int)'「不會超載」?它可能是最受虐待的矢量構造函數 – Ap31

+1

編輯:行動中,我現在看到它。我會編輯我的答案。 –

0

您正在構建一個初始計數爲9但沒有初始值的vector,因此所有字符都初始化爲'\0'(0x00),而不是'0'(0x30)。你需要填充vector你顯示它之前,例如:

#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; 
} 

或者,在C++ 11及更高版本:

#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; 
} 
相關問題