2012-03-23 19 views
-1

これを実行すると、番号1〜9は選択時にXまたはOに変更されません。彼らはただの数である。 void関数のchar値を変更しようとすると問題はありますか? void関数を使用せずにこれを達成する方法がわかりません。文字であり、あなたが数字の1と比較しているためだC++関数内のchar変数を変更します。

#include <iostream> 
#include <string> 

using namespace std; 

char vert = 0xB3; 
char hori = 0xC4; 
char cros = 0xC5; 
char one = '1'; 
char two = '2'; 
char thr = '3'; 
char fou = '4'; 
char fiv = '5'; 
char six = '6'; 
char sev = '7'; 
char eig = '8'; 
char nin = '9'; 
char a; 

void board() 
{ 
    system("cls"); 
    cout << one << vert << two << vert << thr << endl 
     << hori << cros << hori << cros << hori << endl 
     << fou << vert << fiv << vert << six << endl 
     << hori << cros << hori << cros << hori << endl 
     << sev << vert << eig << vert << nin << endl; 
} 



void player1pick() 
{ 
    cout << "First Player's turn. Please pick a box: "; 
    cin >> a; 
    if(a == 1) 
    { 
     one = 'X'; 
    } 
    if(a == 2) 
    { 
     two = 'X'; 
    } 
    if(a == 3) 
    { 
     thr = 'X'; 
    } 
    if(a == 4) 
    { 
     fou = 'X'; 
    } 
    if(a == 5) 
    { 
     fiv = 'X'; 
    } 
    if(a == 6) 
    { 
     six = 'X'; 
    } 
    if(a == 7) 
    { 
     sev = 'X'; 
    } 
    if(a == 8) 
    { 
     eig = 'X'; 
    } 
    if(a == 9) 
    { 
     nin = 'X'; 
    } 
    board(); 
} 

void player2pick() 
{ 
    cout << "Second Player's Turn. Please pick a box: "; 
    cin >> a; 
    if(a == 1) 
    { 
     one = 'O'; 
    } 
    if(a == 2) 
    { 
     two = 'O'; 
    } 
    if(a == 3) 
    { 
     thr = 'O'; 
    } 
    if(a == 4) 
    { 
     fou = 'O'; 
    } 
    if(a == 5) 
    { 
     fiv = 'O'; 
    } 
    if(a == 6) 
    { 
     six = 'O'; 
    } 
    if(a == 7) 
    { 
     sev = 'O'; 
    } 
    if(a == 8) 
    { 
     eig = 'O'; 
    } 
    if(a == 9) 
    { 
     nin = 'O'; 
    } 
    board(); 
} 

int main() 
{ 
    board(); 
    player1pick(); 
    player2pick(); 
    player1pick(); 
    player2pick(); 
    player1pick(); 
    player2pick(); 
    player1pick(); 
    player2pick(); 
    player1pick(); 

    return 0; 
} 
+0

彼らが変わる直前と直後に「1」、「2」を印刷してみましたか? – cctan

答えて

3

。たとえば、プレーヤーが入力としてfo 1を入力すると、 '1'がaに格納されます(asciiでは49です)。比較すると、たとえばif(a == 1)それは基本的に '1'のascii値を1 ...と比較します。だから49 == 1もちろん間違っています。あなたはaの型をintに変更するかcharとcharとを比較する必要があります - 。

+0

これは定期的に起こっているようです。 – Aleks

0

問題は、ユーザーの入力を比較するときに文字値(たとえば'1'と整数値1)を比較している(ほとんどの場合)が等しくないことです。

if (a == '1')にあなたの比較を変更し

のように...

また、あなたは、コレクション(配列、STDのいくつかの並べ替えにボード・セル(1はニンためにあなたの変数)を格納についてティンクする場合があります::ベクターなど)を使用して、取り扱いを容易にし、後に可能な拡大を可能にする。

0

変更char a;int a;
に、それはあなたがコンパイラによって細かい数字と文字のASCII値を比較している文字

0

としてそれを解釈するが、私はそれはあなたが望むものだとは思いません。だから私はあなたがすべてのあなたができる機能でarray

int a; 
char numbers[9] = {'1','2','3','4','5','6','7','8','9'}; 

とif文を置き換えることをお勧めchar a to int

を変更したり、a=='1'

との比較を変更する次のいずれか

cin >> a; 
numbers[a] = 'O'; 
関連する問題