Считывание ввода различных типов данных в одной строке C

#c

Вопрос:

Программа , над которой я работаю, требует, чтобы пользователь ввел что-то вроде i v или r v , где i означает «вставить», r означает «удалить» и v будет целым числом, которое нужно вставить или удалить.

Как я могу прочитать входные данные и разделить их на две переменные, одну для оператора (как в i или d ), а другую для значения?

Пример:

 cout lt;lt; "Enter decision"; cin gt;gt; decision;  // somehow split the decision into the two variables below.  int value; char operation;  

Комментарии:

1. Вы пробовали: char operator; int number; std::cin gt;gt; operation gt;gt; number; ?

Ответ №1:

Если вы хотите что-то прочитать в a std::string (что, я полагаю, так decision и есть), вам следует использовать std::getline . Форматированный ввод, например cin gt;gt; decision; , по умолчанию будет читать только одно слово. Любой символ пробела заставит его прекратить чтение.

 if(std::getline(std::cin, decision)) {  // successfully read a line }  

Затем вам нужно разделить решение на две переменные. Одним из простых решений является использование a std::istringstream . Вы копируете файл std::string в a std::istringstream и извлекаете из него значения:

 #include lt;sstreamgt;  // ...   std::istringstream is(decision);  if(is gt;gt; operation gt;gt; value) {  // success  }  

В зависимости от остальной части программы, другой вариант-читать непосредственно из std::cin двух переменных и пропускать чтение в decision :

 if(std::cin gt;gt; operation gt;gt; value) {  // success }  

Комментарии:

1. Это идеально, спасибо

2. @FayZ Рад это слышать! Не за что!