1

私は現在 C++ を独学していますが、配列を使用しようとすると問題が発生しました。

ユーザーが移動したい場所を発表するために2つの整数を入力すると、ボードが印刷されます

ただし、ボードを一度変更しようとすると、2 つの値が変更されることがよくあります。

例)入力した最初の 4 つの数字が である場合、1つの{0,1,1,0}"x" と 1 つの "o" の 2 つの文字が描かれると予想されます。

しかし、代わりに複数の「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;
}
4

2 に答える 2

1

スタートチェンジの場合

string board[2][2];

string board[3][3];

あなたのループは0から2 - つまり3つのアイテムです

于 2013-10-20T02:23:24.833 に答える
0

配列を 2x2 から 3x3 に変更した後、コードをテストしたところ、動作しているようです。

xposただし、ユーザー入力の値とその後の値を確認する必要がありますypos。コードが現在のように、

board[xpos][ypos] = turn;

範囲外になる可能性があり、プログラムがクラッシュする可能性があります (ユーザーがいずれかの座標に 2 より大きい値を入力した場合)。

最後に、これは個人的な好みの問題ですが、コードはユーザーが入力した 0 から 2 までの座標を使用するようになりました。通常、人々は 1 から 3 の範囲で座標を使用します (つまり、1,1 は左上の四角、真ん中ではない)。これを変更するには、以前に引用した行を次のように変更します。

board[xpos-1][ypos-1] = turn;

(もちろん、値が1から3の間であることを確認した後)。

編集:また、尋ねられたように、座標は垂直-水平です(指定された最初の値は垂直座標を表し、2番目の値は水平座標を表します)。したがって、標準的なデカルト グラフでは、値は (y,x) として表されます。これは、人々 (および、私が推測しているのは、あなた) が慣れているものとは対照的です。

于 2013-10-20T02:57:11.970 に答える