Приглашение командной строки C ++ не должно повторяться - PullRequest
0 голосов
/ 09 октября 2018

Моя программа принимает данные из командной строки и должна иметь возможность обрабатывать как одно-, так и многосимвольные команды, например:

prompt> A  
A response
prompt> AB  
A response  
B response  

Но сейчас моя программа ведет себя так:

prompt> AB
A response
prompt>
B response

Как мне структурировать цикл, чтобы это исправить?
Прямо сейчас у меня есть:

for(;;)
  cout << prompt
  cin >> command
  // error checking
  switch(command) { ... }

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

при условии, что команда объявлена ​​как символ, ваш код делает именно то, что вы говорите.

for(;;)
  cout << prompt // prompt user types AB
  cin >> command  // read one char A
  // error checking
  switch(command) { ... } // process it
}

Теперь вернитесь назад и выполните повторную репликацию.

Вам нужно

for(;;)
{
  cout << prompt
  cin >> commandString // std::string
  for(auto command : commandString) // loop over each char
  {
   switch(command) { ... }
  }
}
0 голосов
/ 09 октября 2018

Как я могу структурировать цикл, чтобы исправить это?

Один из способов сделать это будет:

  1. Считать ввод как токен.
  2. Перебирайте символы токена
  3. Обрабатывайте каждый символ по своему усмотрению.

std::string token;
std::cout << prompt;
std::cin >> token;
for ( char command : token )
{
   switch(command) { ... }
}

Если вы хотите иметь возможность обрабатыватьсимволы пробела в качестве команд, необходимо будет использовать std::getline для чтения строки текста и перебора символов строки.

std::string line;
std::cout << prompt;
std::getline(std::cin, line);
for ( char command : line )
{
   switch(command) { ... }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...