Сначала я хочу извиниться за мой плохой титул. Теперь проблема. Я пытаюсь сравнить две строки в 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 мгновенное пространство, но это тоже не сработало. Есть идеи, почему это происходит?
Похоже, вы используете оператор, аналогичный
std::cin >> game_type;
для получения пользовательского ввода. Проблема заключается в том, что оператор >>
извлекает только первое слово из строки, которую пользователь вводит, что заставляет game_type
содержать только AI
при game_type
AI vs AI
. (В качестве побочной заметки, если бы вы использовали std::cin >> blah
на следующей строке, тогда blah
будет содержать vs
потому что этот введенный ввод еще не был использован.)
Чтобы исправить это, вы можете использовать std::getline
:
std::getline(std::cin, game_type);
Это получает все, что пользователь набирает на линии (вплоть до нажатия клавиши Enter) и помещает это в game_type
. Это почти всегда правильный способ получить пользовательский ввод для интерактивной программы.
AI
.game_type
? Могу поспорить, что вы делаетеstd::cin >> game_type
, который получает только первое слово.