Мне интересно сделать «CMD» -подобный. Я имею в виду, что пользователи могут вводить свои команды в консоли. Проблема у меня в том, что все команды работают, но, например, если мы не пишем каждый args, прог-крах. Вот маленький кусочек кода:C++ Ловля расколотых человеческих ошибок
void commande(std::string commandeWanted)
{
std::vector<std::string> fields;
boost::split(fields, commandeWanted, boost::is_any_of("|")); // I chose | as spliter
boost::to_upper(fields[0]);
//std::cout<< fields[1] << fields[2] <<std::endl;
if (fields[0] == "STOP")
stop(fields[1]);
else if (fields[0] == "DISCONNECT")
disconnect();
else if (fields[0] == "CONNECT")
connect();
else if (fields[0] == "SEND")
send(fields[1], fields[2]);
else if (fields[0] == "clean")
cleanConsole();
else if (fields[0] == "HELP")
displayHelp();
else
std::cout << "No command recognized." << std::endl;
}
Любая идея? Любое предложение ? Я попытался объявить поля [1] и поля [2], но никак. Проблема в том, что я могу ввести «help», это запустит функцию displayHelp, но, к примеру, если я напишу «send» вместо «send | who | what», это приведет к сбою программы. Спасибо вам заранее.
'станд :: string' в списке аргументов функции делает копию строка при вызове функции, которая довольно тяжелая и обычно не нужна. Возьмите 'const std :: string &' вместо этого, или, если вы хотите изменить строку, 'std :: string &'. – GingerPlusPlus
Ну, ладно. Я использовал решение Джонатана Ми, и это сработало. Спасибо всем за вашу помощь, и у меня хороший день. Для полей переключения и чемпиона, это потому, что я французский, и я написал программу на французском языке. Но для должности я перевел его. – NorthernLight