Двойное использование getline (cin, var) приводит к ошибке при сравнении строк (==) - PullRequest
0 голосов
/ 16 июня 2020
void command_menu(){
  string command = "default000",
         command_upper;
  bool incorrect_input = false;
  do{
    clear_replit();
    default_display();
    cout << "\nType 'commands' to see a list of options, or enter a command.\n";
    if(command == "default000"){}
    else{
      cout << special_text("red","'");
      cout << special_text("green", command) << special_text("red", "'");
      cout << special_text("red", " is not a recognized command.\n");
    }
    getline(cin, command);
    command_upper = string_toupper(command);
    if(command_upper == "COMMANDS"){
      list_of_commands();
    }

У меня проблема с запуском этого фрагмента кода, которая не была решена добавлением cin.ignore () или cin.clear () или обоих до или после команды getline.

Если я ввожу "команды" в командной строке, проверка if (command = "commands") проходит. Если я сначала наберу gibberi sh («бла»), меня снова спросят, как и ожидалось, и если я введу «команды», оно сохранит слово «команды» в переменной getline, но теперь if (command = = "commands") проверка не удалась.

Если вам нужен рабочий код, весь мой проект можно найти здесь: https://repl.it/@AndreLouis / Scrabble # main. cpp

Воспроизведите ошибку, сначала набрав «commands» и увидев выполнение программы, затем снова запустите программу, введите «blah», а затем введите «commands».

1 Ответ

0 голосов
/ 16 июня 2020

Проблема со значением incorrect_input. Когда вы сравниваете command_upper с "КОМАНДЫ" , вам нужно убедиться, что для этой переменной установлено значение false , иначе после первой неудачной проверки значение всегда будет true.

Установить incorrect_input fo false в начале l oop:

bool incorrect_input = false;
do{
    incorrect_input = false;
    clear_replit();
...
...