我是 c++ 的新手。学习基本知识后,我想做井字游戏。
对于印刷板,我在下面编写代码,但它显示错误:
#include<iostream>
using namespace std;
int main(){
char board[8]={'_','_','_n','_','_','_n','_','_','_n'};
cout<<'|'+ board[0]+'|'+ board[1]+'|'+ board[2]<<endl;
cout<<'|'+ board[3]+'|'+ board[4]+'|'+ board[5]<<endl;
cout<<'|'+ board[6]+'|'+ board[7]+'|'+ board[8]<<endl;
return 0;
}
这里有几个错误:
-
too many initializers for ‘char [8]’
将板定义为包含 8 个元素,并在项目列表中应用 9 个元素。 -
narrowing conversion of ‘24330’ from ‘int’ to ‘char’
'_n'
是 2 个字符,而不是单个字符。
修复:
char board[12] = {'_', '_', '_', 'n', '_', '_', '_', 'n', '_', '_', '_', 'n'};
第三个错误是算法错误,而不是编译错误 - 使用循环迭代数组元素。
解决方案是在声明正在初始化的数组时不指定任何数组边界:
char board[]={'_','_','_','_','_','_','_','_','_'};
编译器将自动确定要初始化的字符数。
如果有 67 或 142 个项目怎么办? 希望您不会尝试计数并找出要放置在数组中的数字,因为这容易出错。 让编译器为您完成这项工作。
其次,'_n'
不是一个单一的角色。 如果您确实想在数组中放置换行符:
char board[]={'_','_','_','n','_','_','_','n','_','_','_','n'};
如果您以后想知道字符数:
const int num_characters = sizeof(board) / sizeof(board[0]);
或者,如果您使用的是 C++17 或更高版本:
std::size(board);
正如之前的答案已经指出的那样。有两件事需要改变:
- 删除"">
- 更改电路板阵列大小。
- 删除
+
符号,因为它只会添加两个字符,就好像它是两个数字一样。
所以这是这三个之后的结果:
#include<iostream>
using namespace std;
int main(){
char board[9]={'_','_','_','_','_','_','_','_','_'};
cout << '|' << board[0] << '|' << board[1] << '|' << board[2] << endl;
cout << '|' << board[3] << '|' << board[4] << '|' << board[5] << endl;
cout << '|' << board[6] << '|' << board[7] << '|' << board[8] << endl;
return 0;
}
注意:我编辑了我的答案,并在下面的评论之后添加了第三步。