简单的数组操作错误
Simple array manipulation error?
>我目前正在自学C++,并且在尝试使用数组时遇到了问题:
我正在尝试制作一个井字游戏,用户将输入两个整数来宣布他想移动到哪里,然后为他们打印出棋盘。
除了,当我尝试修改我的板一次时,它通常会改变两个值!
示例)如果我输入的前四个数字是{0,1,1,0}
我希望画出两个字母 - 一个"x"和一个"o"。
而是画了多个"o"!
谢谢你的帮助!
#include <string>
#include <iostream>
using namespace std;
string board[2][2];
int xpos, ypos;
string turn;
int main()
{
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
board[i][j]="-";
}
}
for(int i=0;i<9;i++)
{
if(i%2==0)
turn = "x";
else
turn = "o";
cout<< "Where are you moving?n";
cin>> xpos >> ypos;
board[xpos][ypos] = turn;
cout<<"The board is:n";
cout<< board[0][0]+board[0][1]+board[0][2]+ "n";
cout<< board[1][0]+board[1][1]+board[1][2]+ "n";
cout<< board[2][0]+board[2][1]+board[2][2]+ "n";
}
return 0;
}
对于开始更改
string board[2][2];
自
string board[3][3];
由于您的循环从 0 到 2 - 即 3 个项目
将数组从 2x2 更改为 3x3 后,我测试了代码,它似乎可以工作。
但是,您应该在用户输入后检查 xpos
和 ypos
的值:就像现在的代码一样,
board[xpos][ypos] = turn;
可能超出界限,并可能使程序崩溃(如果用户在任何坐标上输入大于 2 的任何内容)。
最后,这是个人喜好的问题,您的代码现在使用用户输入的从 0 到 2 的坐标。通常,人们会在 1 到 3 的范围内说它们(所以 1,1 将是左上角最正方形,而不是中间的正方形)。更改此设置是将先前引用的行更改为
board[xpos-1][ypos-1] = turn;
(当然,检查后,值在 1 到 3 之间)。
编辑:此外,根据要求,坐标是垂直水平的(意味着给出的第一个值表示垂直坐标,第二个值表示水平坐标)。因此,在标准笛卡尔图上,您的值表示为(y,x),与人们(我只是猜测,您)习惯的相反。
相关文章:
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 如何修复无效的API密钥,IP或操作权限错误?
- 使用 OpenCV readNetFromTensorFlow 运行 Keras DNN 模型 (UNet):错误:操作
- Websocket 客户端在 C++ 中使用 boost::Beast - 在写入操作时抛出错误
- 在C++中使用友元函数操作模板类中的私有变量时会发生错误
- 如何修复重新平衡时AVL删除操作中的分段错误?
- 元数据操作失败LNK2022错误 (8013118D):重复类型中的布局信息不一致 (选择设备参数):(0x020002
- 我的移动分配操作程序重载的分段错误
- 打印矩阵后分割错误,但在打印额外行后修复(ostream <<操作器)
- glteximage3d抛出错误1282(无效操作)
- INC 操作码编译到错误的地址
- 当提供巨大的输入时,中止在堆栈操作程序中调用错误
- 加速 ASIO 系统错误 995:I/O 操作已中止
- 将迭代器放置为临时范围时,非销钉 - 操作和错误
- 二进制搜索树操作程序错误:分割故障(核心倾倒)
- 如何修复问题中的"teminated due to timeout"错误 数组操作 |黑客兰克?
- 尝试执行任何需要它的操作时,无法修复 WinAPI 中的"invalid handle"错误
- 错误:如果(object1 == object2),“操作器==”无匹配(操作数类型为“ const class”和“
- 为什么此内联程序集中的错误操作无法正常工作