2012-07-10 78 views
0

它可能是非常低效和雜亂的,但這裏是我的問題 - 它說什麼像「zz == defo & & zo == defo」的地方等於紅色下劃線說錯誤:沒有運算符「==」匹配這些操作數,當我運行我得到一個錯誤,這是太長,張貼在這裏 - http://pastebin.com/KTEM0MZKtictactoe遊戲沒有運算符「==」匹配這些操作數

我做錯了什麼?在此先感謝

這裏是我的代碼 -

#include <iostream> 
#include <cstdlib> // for rand() and srand() 
#include <ctime> // for time() 
using namespace std; 

string random1(){ 
    srand(((time(0) - 23) * time(0)) - (9*time(0))); 
    if (rand() % 2 == 0){ 
    return "1"; 
     } else { 
      return "0"; 
     } 
} 
string random2(){ 
    srand((((time(0) - 89) * time(0)) - (9*time(0))/3) - 99); 
    if (rand() % 2 == 0){ 
    return "1"; 
     } else { 
      return "0"; 
     } 
} 
int main(){ 
    string zz = "-"; 
    string zo = "-"; 
    string zt = "-"; 
    string oz = "-"; 
    string oo = "-"; 
    string ot = "-"; 
    string tz = "-"; 
    string to = "-"; 
    string tt = "-"; 
    for(int a = 1;a<=9;a++){ 
     srand (time(NULL) - 8); 
     int ran1 = rand() % 3; 
     srand (time(NULL) * 2); 
     int ran2 = rand() % 3; 
     int tote = (ran1 * 10) + ran2; 
     cout << endl << "format- 0 = zero, 1 = one, 2 = two" << endl; 
     int input; 
     cin >> input; 
     if(input == 00){ 
      zz = "X"; 
     } else if(input == 01){ 
      zo = "X"; 
     } else if(input == 02){ 
      zt = "X"; 
     } else if(input == 10){ 
      oz = "X"; 
     } else if(input == 11){ 
      oo = "X"; 
     } else if(input == 12){ 
      ot = "X"; 
     } else if(input == 20){ 
      tz = "X"; 
     } else if(input == 21){ 
      to = "X"; 
     } else if(input == 22){ 
      tt = "X"; 
     } 
     // now for the computers part 
     if(tote == 00){ 
      zz = "O"; 
     } else if(tote == 01){ 
      zo = "O"; 
     } else if(tote == 02){ 
      zt = "O"; 
     } else if(tote == 10){ 
      oz = "O"; 
     } else if(tote == 11){ 
      oo = "O"; 
     } else if(tote == 12){ 
      ot = "O"; 
     } else if(tote == 20){ 
      tz = "O"; 
     } else if(tote == 21){ 
      to = "O"; 
     } else if(tote == 22){ 
      tt = "O"; 
     } 
     printf ("|%d|%d|%d", zz, zo, zt); 
     cout << endl; 
     printf ("|%d|%d|%d", oz, oo, ot); 
     cout << endl; 
     printf ("|%d|%d|%d", tz, to, tt); 

     if(zz == "X" && zo == "X" && zt == "X" || oz == "X" && oo == "X" && ot == "X" || tz == "X" && to == "X" && tt == "X" || zz == "X" && oz == "X" && tz == "X" || zo == "X" && oo == "X" && to == "X" || zt == "X" && ot == "X" && tt == "X" || zz == "X" && oo == "X" && tt == "X"){ 
      cout << endl << "X WINNER"; 
     break; 
     } 
     if(zz == "O" && zo == "O" && zt == "O" || oz == "O" && oo == "O" && ot == "O" || tz == "O" && to == "O" && tt == "O" || zz == "O" && oz == "O" && tz == "O" || zo == "O" && oo == "O" && to == "O" || zt == "O" && ot == "O" && tt == "O" || zz == "O" && oo == "O" && tt == "O"){ 
      cout << endl << "O WINNER"; 
      break; 
     } 
    } 
    system("pause"); 
    return 0; 
} 
+1

每次你想要一個隨機數時不要調用'srand()'。在調用rand()之前調用int ONCE。 – 2012-07-10 16:29:20

回答

1

您需要#include <string>,其中operator==定義。

而且,正如jrok所述,您正在將std::string傳遞給printf():使用cout代替(正如您已經使用的那樣)。

0

您試圖將std::string s傳遞給printf,這是一個C庫函數。此外,格式字符串表示您將傳遞整數("|%d|%d|%d")。

printf將只需要C風格的字符串,所以如果這是你想要的,你可以這樣說:

printf("|%s|%s|%s", ot.c_str(), zz.c_str(), ...); 
0

也屬於你的代碼

if(zz == "X" && zo == "X" && zt == "X" || oz == "X" && oo == "X" && ot == "X" || tz == "X" && to == "X" && tt == "X" || zz == "X" && oz == "X" && tz == "X" || zo == "X" && oo == "X" && to == "X" || zt == "X" && ot == "X" && tt == "X" || zz == "X" && oo == "X" && tt == "X"){ 
     cout << endl << "X WINNER"; 

應該

if((zz == "X" && zo == "X" && zt == "X") || (oz == "X" && oo == "X" && ot == "X") || (tz == "X" && to == "X" && tt == "X") || (zz == "X" && oz == "X" && tz == "X") || (zo == "X" && oo == "X" && to == "X") || (zt == "X" && ot == "X" && tt == "X") || (zz == "X" && oo == "X" && tt == "X")){ 
     cout << endl << "X WINNER"; 

你的比較是看着每個單獨的標記,而不是尋找一個組合商標。 ()圍繞每組3將給你你想要的結果。

+0

將AND放在括號內可能會使其更具可讀性,但它們的優先級高於OR。 – chris 2012-07-10 16:19:50

+0

哦...嗯我的壞,我認爲他們在同一水平上,所以你看着(zt ==「X」|| oz ==「X」)&&(zo ==「X」)。即使我從中學到了一些東西:-D – 2012-07-10 16:27:13

相關問題