2010-08-18 4 views
1

Я реализую небольшой синтаксический анализатор командной строки. Предположим, у меня есть команда, которая требует 2 параметра. Я хочу, чтобы пользователь вводил все 3 строки (команда и 2 параметра) на одну строку, а также на несколько строк. В настоящее время у меня что-то вроде этого:проверить, если std :: cin operator >> прочитал всю строку

std::string command; 
std::cin >> command; 
std::cout << command << " entered\n"; 
std::string param1; 
std::cin >> param1; 
std::cout << param1 << " entered\n"; 
std::string param2; 
std::cin >> param2; 
std::cout << param2 << " entered\n"; 

Теперь я хочу, чтобы быть в состоянии обнаружить, что пользователь только что вошел в команду без какого-либо параметра, и выходные направления для этого. Я думаю, что после получения команды я должен проверить, содержит ли строка что-то еще, а если нет, попросите пользователя ввести больше. Я пробовал с eof() и fail(), но они не работают. Как я могу проверить это?

Спасибо.

ответ

6

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

+0

+1 Beat me to it .. –

+0

ну, но я думаю, что я так близок к этому, что мне не придется сломать строку и подсчитать токены – phunehehe

+1

@phunehehe: Как сказали, вы выполняете команду _line_ парсер. Чтение строки за строкой (например, с помощью 'getline') является единственным разумным способом достижения этого. Вы можете выполнить синтаксический анализ слов с '>>' и 'istringstream' из строки чтения так же, как вы из' cin' в данный момент. –

 Смежные вопросы

  • Нет связанных вопросов^_^