2012-02-21 10 views
1

こんにちは17私は自分自身を教えようとしている+ + +。私の最初のプロジェクトの1つとして、チック・タック・トゥ・ゲームを書いて、AIと対戦しようとしています。だから、とのトラブルを抱えてコードイムは、私がメッセージを取得する「あなたはxまたはO?なりたいです」このtic-tac-toe whileと||

main() { 

    char player, computer; 

    while (player != 'x' || player != 'o') 
    { 
     cout << "do you want to be x or o?"; 
     cin >> player; 
    }; 

    if (player == 'x') computer == 'o'; 
    else computer == 'x'; 

    cout << "player is: " << player << endl << "computer is: " << computer ; 
    cout << computer; 
}; 

ですが、その後私は、xまたはOを入力すると、それは同じ 質問を繰り返し続けます。私はそれがwhileループと関係があると思う。どんな助けもありがとうございます。

+0

のですか? –

+0

警告、初期化する前にプレイヤーをチェックしています! プレイヤーがランダムに「x」または「o」という値で終了する可能性があります。変数を使用する前に、変数を初期化しなければなりません。 – abelenky

+0

CodingMasteroこれは、ちょうど私が来た –

答えて

6

をお使いのループ終了条件が間違っている、とあなたは一度尋ねてきたまではチェックしてはいけません。

do { 
    cout << "do you want to be x or o?"; 
    cin >> player; 
} while (player != 'x' && player != 'o'); 
+0

okありがとう、私はdoをしていると思っていたが、 –

7
char player, computer; 

while (player != 'x' || player != 'o') { 

まず、playerは初期化されていないため、ランダムなごみが含まれています。あなたはそれから読むべきではありません。少なくとも既知の値に初期化してください。

第2に、あなたの状態は常に真です。 player'x'であるとします。これは条件player != 'o'を満たしています。

おそらく意味:

while (player != 'x' && player != 'o') { 
+0

ああ、私のためにそれを明確にしてくれてありがとう、しかし、私は何をプレイヤーを初期化する必要がありますか? –

+0

あなたの場合、 '' x' 'や '' o''(例えば 'char player =' a ';')以外のものを初期化するだけで済みます。しかし、StilesCrisisのような 'do-while'ループを使うと、あなたが書き込んだ後で' player'値をチェックするほうがよいでしょう。 – jamesdlin

1

問題は条件付きです。あなたが意味すると思うのは、while (player != 'x' && player != 'o')です。つまり、playerがxでもoでもない場合です。これは、テキストブックから例えば

+0

とプレイヤーの初期化 –

0
while ((player == 'x' || player == 'o') == false) 
+0

'== false'を確信していなかった? Eww。これは '!'演算子のためのものです。 – jamesdlin

+1

なぜブール式で== falseを使う必要があるのですか? –

0
char player = ' '; // always init variables 
    while (player != 'x' && player != 'o') //exit if false, when player == x or == o 
    { 
     cout << "do you want to be x or o?"; 
     cin >> player; 
    };