Сравнение данных пришедших из клавиатуры
Написал неболшой класс для получения данных с клавиатуры
class input{
private:
std::string symbols;
public:
bool enterPressed{false};
void getInput(sf::Event &event){
if (event.type == sf::Event::TextEntered)
{
if (event.text.unicode < 128)
{
enterPressed=false;
if(13 == static_cast<int>(event.text.unicode)){
enterPressed=true;
}
if (8 == static_cast<int>(event.text.unicode)){
if(8 == static_cast<int>(event.text.unicode)){
if(symbols.size()!=0)
symbols.erase(symbols.end()-1);
else
symbols="";
}
} else{
sf::String str;
str = event.text.unicode;
symbols+=str.toAnsiString();
}
}
}
}
//////////////////////////////
std::string getChars(){
return symbols;
}
/////////////////////////////
void clear(){
symbols="";
}
};
Получив данные, я пытаюсь их сравнить.
std::string writedData = input.getChars()
if(writedData.compare("quit")==0){
pushexit();
}
Но условие никогда не выполняется, я выводил строки с помощью std::cout, они одинаковые
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Вот после этого
if(13 == static_cast<int>(event.text.unicode)){
enterPressed=true;
}
нет else, поэтому, следующий if отрабатывает и так как там точно не 8, то отрабатывает ветка else, которая и добавляет этот символ в строку.
При печате очень часто сложно увидеть перевод строки, особенно, если не знать о нем.
Если все равно строки будут "разными", печатайте их в хекс виде
for (int i = 0; i < writedData.length(); i++) {
std::cout << std::hex << (int)writedData[i] << " ";
}
Возможно, в строке есть ещё что то интересное.