2014-12-11 57 views
0

所以,我想添加一些東西,允許我使用argv來允許三個命令行輸入。C++解析命令行參數和布爾

這樣的:

./program input.dat (string input) 

讓(我認爲)argv[0] = input.datargv[1] = string inputargue[2] = file output

...我不知道如果我解釋是正確的,但是這是我最好的努力。 我想要做的是有一個命令行輸入,允許我喜歡,如果它說「加密」它使布爾真實,如果我鍵入「解密」它將該布爾設置爲false。

+0

'argv [0]'總是程序的名稱。參數從'argv [1]'開始。 – Barmar 2014-12-11 03:05:23

+0

你在用什麼語言?它沒有參數解析庫,比如'getopt'? – Barmar 2014-12-11 03:05:55

+0

是啊,對不起,這就是我的意思。即時通訊使用C++,對不起,我有點搞砸了這個問題!我對編程相當陌生(這是我第二學期的結束) – 2014-12-11 03:06:20

回答

2
bool encrypt; 
std::string action(argv[2]); 
if (action == "encrypt") { 
    encrypt = true; 
} else if (action == "decrypt") { 
    encrypt = false; 
} else { 
    // Report invalid argument 
} 
+0

感謝!工作! – 2014-12-11 03:20:06

0

要做到你描述:

int main(int argc, char** argv) { 
    if (argc < 3) { 
     // print usage here and return, since that's what you need. 
    } 

    const char* filename = argv[1]; 

    if (!strcmp(argv[2], "encrypt")) { 
     // encrypt! 
    } 
    else if (!strcmp(argv[2], "decrypt")) { 
     // decrypt! 
    } 
    else { 
     // error! 
    } 
} 

或者用字符串:

std::string filename = argv[1]; 
std::string mode = argv[2]; 
if (mode == "encrypt") { 
    // etc. 
} 

你可以有很多args來,有什麼可調用阻止你:

./program hi everybody this is a little excessive but just an example 

在哪一點,你會被叫與argc == 12以及例如指向「a」的argv[5]