2012-05-07 4 views
0

Я выполнил программу, которая использовала аргументы командной строки для ее запуска. Теперь я пытаюсь сделать программу диска меню как часть своего «улучшения». Я использовал,Преобразование командной строки в программу, управляемую меню

int main(int argc, char * argv[]) 

в оригинале, где заданы параметры были:

char * startCity = argv[1]; 
char * endCity = argv[2]; 
in.open(argv[3],ios::in); //<----file name went here 

Вот что я сделал, и теперь я знаю, что это неправильно:

int main(int argc, char * argv[]){ 

int menuChoice; 
string startCity; 
string endCity; 
string fileName; 
ifstream in; 

cout<<"Welcome to J.A.C. P2\n" 
    "\n" 
    "This program will find the shortest path\n" 
    "from One city to all other cities if there\n" 
    "is a connecting node, find the shortest path\n" 
    "between two cities or find the shortest\n" 
    "between three or more cities.\n"<<endl; 

cout<<"Please make a choice of what you would like to do:\n"<<endl; 

cout<<" 1------> Shortest Path between 2 cities.\n" 
     " 2------> Shortest Path between 3 or more cities.\n" 
     " 3------> Shortest Path from 1 city to all.\n" 
     " 9------> Take your ball and go home!\n"<<endl; 
cout<<"Waiting on you: "; cin>>menuChoice; 

switch (menuChoice) { 
    case 1: 
     cout<<"Enter the starting city: "; 
     cin>>StartCity; 
     cout<<"\nEnter the ending city: "; 
     cin>>EndCity; 
     cout<<"\nEnter the name of the file: "; 
     cin>> fileName; 

    break; 

Поскольку все мои программы основано на char * argv [] Как я могу преобразовать их в строки ИЛИ как я могу назначить переменные аргументам, чтобы их прочитать?

Я ценю все ответы, но они, похоже, идут в направлении, в котором я пытаюсь убежать. В программе OLD использовались аргументы командной строки. Как я могу это сделать:

string StartCity = char * argv[1]; 
string EndCity = char * agrv[2]; 
string filename = in.open(argv[3],ios::in); 

Это то, что я пытаюсь сделать. Мне жаль, если я не прояснился.

+0

'string s = argv [0];' Это то, что вы подразумеваете для преобразования аргументов? – chris

+0

Я думаю, что OP хочет по-другому. 'char * = sting s' – gardian06

+0

@chris no, я отредактировал мой оригинальный вопрос, на самом деле я думаю, что я пытаюсь сделать то, что сказал только назад –

ответ

4

Это может помочь.

int main (int argc, char ** argv) 
{ 
      std::vector<std::string> params(argv, argv + argc);  
      //Now you can use the command line arguments params[0], params[1] ... 

} 
+2

Мне нравится ваш ярлык для преобразования в вектор :) – matiu

+0

Нужно ли это другим способом редактировать сообщение. –

0

преобразовать аргументы командной строки для строк:

std::vector<std::string> args(argc); 
for (int i=1; i<argc; ++i) 
    args[i] = argv[i]; 

я начинаю в '1', потому что '0' это название программы:


, чтобы получить их в Пере , возможно:

// Make sure we're not accessing past the end of the array. 
if (argc != 4) { 
    std::cout << "Please enter three command line arguments" << std::endl; 
    return 1; 
} 

string startCity = argv[1]; 
string endCity = argv[2]; 
string fileName = argv[3];  
0

Чтобы получить const char * от std::string, используйте std::string::c_str().

fstream file; 
string s = "path\\file.txt"; 
file.open (s.c_str(), ios::in); 
+0

Нужно это другим способом. Отредактировано оригинальное сообщение. –

+0

Не уверен, что вы имеете в виду, единственный способ - это как строка 's s = some_char_array;', о которой я упоминал в комментариях. – chris

+0

Надеюсь, что мой пост, отредактированный пост, сделал его более понятным. –

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