作为Tic-Tac-Toe游戏的一部分,我正在尝试创建一个填充数字1-9的字符向量。为什么以下代码不起作用?这只是完整代码的简化版本,所有这些都可能有点笨拙。这应该做我想要的吗?为什么不cout
'0'?当我试图展示里面的内容时,它似乎是空的。我是否错误地填充了矢量?
是的,我知道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 :(得分:2)
您的代码会打印向量的初始元素的内容,因此只需要将该字符放入该元素中即可。
您的代码将字符'\0'
放在那里,这是不可打印的。如果您想打印字符数字,请将其放在矢量中:
vector<char> box(NUM_SQUARES, 'X');
cout << board[0] << endl; // prints X
答案 1 :(得分:0)
因为你将它存储为char,就像
一样char c=0;
std::cout << c;
不会打印任何内容。
如果您想展示0
,则需要将其投放到int
,即std::cout << (int)board[0];
答案 2 :(得分:0)
您构建的vector
初始计数为9,但没有初始值,因此字符全部初始化为'\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;
}
答案 3 :(得分:-2)
向量不是数组。您不需要事先预留内存空间。只需声明一个空向量,然后使用for循环填充所述向量。
或者,更好的是,因为你只需要9个元素并且永远不会改变,只需声明一个字符数组。