Я пытаюсь создать приложение для командной строки, где пользователь может вводить команды и данные, но я не совсем понимаю, как работает istream_iterator, как я могу получить весь ввод (до ввода) в вектор? Прямо сейчас он создает новый цикл while для каждого слова, это не то, что нужно.
int main(int argc, char* argv[])
{
string buffer;
//vector<string> vbuff;
CliHandler clihandler(argc, argv);
int state = clihandler.State();
while (state != CliHandler::STATE_EXIT) {
cout << ">>";
//Beolvasás
cin >> buffer;
stringstream sstream(buffer);
istream_iterator<string> begin(sstream);
istream_iterator<string> end;
vector<string> vbuff(begin,end);
copy(vbuff.begin(), vbuff.end(), std::ostream_iterator<string>(std::cout, "\n"));//test
//vbuff = vector<string>((istream_iterator<string>(cin)), istream_iterator<string>());
//copy(vbuff.begin(), vbuff.end(), std::ostream_iterator<string>(std::cout, "\n"));
switch(clihandler.State(vbuff[0])) {
// [command] [data1] [data2] ...
}
}
return 0;
}
Почему бы тебе просто не использовать argc
а также argv
параметры? Как то так .. (не проверял)
int main(int argc, char* argv[])
{
vector<string> vbuff(argc);
for (int i = 0; i < argc; ++i)
{
vbuff[i] = argv[i];
}
// From here, you can use vbuff for your own purposes.
}
Я не очень уверен, что ты хочешь (мой плохой английский ..), может быть, вы хотите получить ввод всей строки до ввода
Я думаю, что вы можете использовать cin.getline
char mbuf[1024];
cin.getline(buffer,1024);
На основании вашего комментария: «Я читаю ввод в интерактивном режиме. Команда выхода вышла бы из цикла while и завершила бы программу»
Вам лучше сначала заставить этот простой цикл работать, прежде чем пытаться обработать входную строку.
std::string inputCommand;
while(inputCommand != "Exit")
{
cin >> inputCommand;
//do stuff with it
}
Тогда вы могли бы рассмотреть возможность разделения и обработки строки
bool shouldExit(false);
std::vector<std::string> inputsReceived;
while(!shouldExit)
{
char delim ('#'); //here put whatever character your inputs are separated by
std::string buffer;
cin >> buffer;
std::stringstream ss;
ss << buffer;
std::string item;
while (std::getline(ss, item, delim))
{
if (item == "Exit") //case sensitive
{
shouldExit = true;
break;
}
else
{
//do whatever with input
}
//if you want to keep a record of the inputs in a vector
inputsReceived.push_back(item);
}
}