2017-06-02 49 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; 
} 
相关问题