2014-07-23 60 views
0

首先,我想對我的壞名字進行辯護。現在的問題。我試圖在C++中比較兩個字符串。我曾嘗試使用string.compare和==,但他們都沒有工作。這裏是代碼C++ string.compare不接受空格字符

if(game_type == "AI vs AI"){ 
    std::cout<<"You choosed AI vs AI\n"; 
    aiVsAI(range); 
} 
else{ 
std::cerr <<"Error"; 
} 

與string.compare

if(game_type.compare("AI vs AI") == 0){ 
    std::cout<<"You choosed AI vs AI\n"; 
    aiVsAI(range); 
} 
else{ 
    std::cerr <<"Error"; 
} 

如果我給AIvsAI輸入該程序正常工作,但如果我進入AI(空間)VS(空間)的AI,該程序打印「錯誤」。我嘗試過使用\ x20空間,但這並沒有奏效。任何想法爲什麼發生這種情況?

+0

打印字符串。我敢打賭你會看到'AI'。 – chris

+4

你如何獲得'game_type'?我敢打賭你正在做'std :: cin >> game_type',它只能得到第一個單詞。 –

+0

@Greg,我不這麼認爲,因爲那麼「AIvsAI」也不行。但我確實很好奇'game_type'的價值。 – rashmatash

回答

2

看來,你正在使用類似的聲明,

std::cin >> game_type; 

獲取用戶輸入。問題是,>>運營商只提取第一個字從用戶類型的行,這使得game_type只包含AI當您鍵入AI vs AI。 (作爲一個方面說明,如果你要到下一行使用std::cin >> blah,然後blah將包含vs因爲打字輸入還沒有被消耗掉。)

爲了解決這個問題,你可以使用std::getline

std::getline(std::cin, game_type); 

這會得到用戶在線上輸入的所有內容(最多但不包括輸入按鍵)並將其放入game_type。這幾乎總是爲交互式程序獲取用戶輸入的正確方式。