Member 12812147 Ответов: 1

Как я могу позволить пользователю ввести две команды в одной строке на cmd ?


Привет,
Я пытался написать код, который позволяет пользователю вводить некоторые команды на экране cmd.
Проект заключается в добавлении узлов с данными в связанный список . данные вводятся пользователем, набирающим "add" и за ним следует число, но другая информация об узле должна быть введена с помощью "set - номер узла-имя переменной - ее значение ",

Я пытался, но я не мог позволить им быть в одной линии, как это:
> Добавить 0324782012
(создайте новый узел с номером = 0324782012)
> set 0324782012 title Data Structures Using C++
(указать название узла 0324782012 для “структур данных
es с использованием C++”).

Узел имеет номер int и заголовок строки .

не могли бы вы пожалуйста помочь ?

Что я уже пробовал:

int main(){
	Node* node =NULL;	 
	string line,line2;
	while(getline(cin, line)){	

		istringstream command (line);
		string cmd;
		command >> cmd;

			if(cmd == "add")
			{
				int x;
				command >> x;
				add(&node,x);
				cout<<"The node with number "<<node->number<<" has been added."<<endl;
			}
			else if(cmd == "set")
			{
				Node* p=node;
				int x;
				command >> x;
				while (p!=NULL){
					
					if (p->number==x){

						while ( getline(cin, line2) ){
							istringstream command_in (line2);
							string cmd_in;
							command_in>>cmd_in;

						if(cmd_in == "title"){
							string y;
							command_in  >> y ;
							title(&p,y);
							break;
						}
                            }break;}
                p=p->next;
				
				}
else cout << "Invalid Command" << endl;
	}

}

[no name]

Посмотрите на аргументы командной строки здесь http://www.cprogramming.com/tutorial/lesson14.html

Richard MacCutchan

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

1 Ответов

Рейтинг:
2

Leo Chapiro

Это просто: на ваш звонок &ЛТ;программа&ГТ; "добавить 0324782012" "набор 0324782012 название структур данных с использованием C++"

Вы получаете argc == 3, и вы можете получить

argv[0] with "yourprogram" 
argv[1] with "add 0324782012" 
argv[2] with "set 0324782012 title Data Structures Using C++"


Разделитель-это пробел,и вам нужно позаботиться о правильном цитировании.

Чтобы увидеть, как получить параметр, вы можете использовать этот простой пример:

int main(int argc, char* argv[]) 
{
	cout << "argc = " << argc << endl;

	for (int i = 0; i < argc; i++)
		cout << "argv[" << i << "] = " << argv[i] << endl;

	return 0;
}


Выход:

argc = 3
argv[0] = x:\myprogram.exe
argv[1] = add 0324782012
argv[2] = set 0324782012 title Data Structures Using C++


Leo Chapiro

int main(int argc, char* argv[]) {
соиь <&ЛТ; "АГДС =" &ЛТ;&ЛТ; АГДС на << епси;
for (int i = 0; i < argc; i++)
соиь <&ЛТ; "агду[" &ЛТ;&ЛТ; я &Л;&Л; "] = " &ЛТ;&ЛТ; агду[я] И Л;< епси;
возвращает 0;
}

Leo Chapiro

Я просто хотел показать вам способ, как "позволить пользователю ввести две команды в одну строку", вот и все.