2016-08-16 70 views
-5

,所以我希望有可以幫忙 我有計劃開始了這樣的INT主()我不能在這裏明白的問題:無法清點焦炭

Board br; 
    GetNames(); 
    br.PresentPlayer(); 

    system("PAUSE"); 
    return 0; 

GetNames()看起來是這樣的:

char p[100]; 
char p2[100]; 
Board br; 
cout << "Please Enter Player 1's Name:"; 
cin >> _player_name_1; 
cout << "Please Enter " << _player_name_1 << "'s Symbol(Make sure its 1 characters long):"; 
cin >> p; 
cout << "Please Enter Player 2's Name:"; 
cin >> _player_name_2; 
cout << "Please Enter " << _player_name_2 << "'s Symbol(Make sure its 1 characters long):"; 
cin >> p2; 
br.SetSymbols(p[0], p2[0]); 

局:: SetSymbols(字符p,焦炭P2)看起來是這樣的:

void Board::SetSymbols(char p1,char p2) 
{ 
_player_char_1 = p1; 
_player_char_2 = p2; 
_current_player = _player_char_1; 
cout << _current_player << endl; 
} 

變量爲董事會。 H:

char _player_char_1; 
char _player_char_2; 
char _current_player; 

而且最後PresentPlayer():

void Board::PresentPlayer() 
{ 
cout << _current_player << endl; 

} 

所以當執行SetSymbols它打印出_player_char_1正確 然而,當PresentPlayer執行它打印出來,你會做到這一點ALT那些符號+ numlock數字

爲什麼會發生這種情況?

+0

爲什麼你'董事會:: SetSymbols'兩次? – Barmar

+0

什麼是'PresentPlayer'? – Barmar

+5

你有兩個董事會br副本。您將數據設置爲一個,然後在另一箇中打印數據。 –

回答

-5
char _player_char_1; 
char _player_char_2; 
char _current_player; 

應該

char *_player_char_1; 
char *_player_char_2; 
char *_current_player; 

或者,因爲你正在使用C++,停止使用char*(你不爲他們分配內存,或檢查範圍),使用std::string代替。

void Board::SetSymbols(char p1,char p2) 

需求是

void Board::SetSymbols(char *p1,char *p2) 

甚至更​​好

void Board::SetSymbols(std::string &p1, std::string &p2) 
+2

如果不是'std :: string',那麼至少爲玩家使用'char []'而不是'char *',並確保使用'std :: setw'來避免緩衝區從'cin >>'溢出。 –

+0

你是什麼意思「你沒有爲他們分配內存?」 – belkipAndroidness

+2

這是如何回答這個問題的? – Kevin