Я реализую небольшой синтаксический анализатор командной строки. Предположим, у меня есть команда, которая требует 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()
, но они не работают. Как я могу проверить это?
Спасибо.
+1 Beat me to it .. –
ну, но я думаю, что я так близок к этому, что мне не придется сломать строку и подсчитать токены – phunehehe
@phunehehe: Как сказали, вы выполняете команду _line_ парсер. Чтение строки за строкой (например, с помощью 'getline') является единственным разумным способом достижения этого. Вы можете выполнить синтаксический анализ слов с '>>' и 'istringstream' из строки чтения так же, как вы из' cin' в данный момент. –