2014-12-11 64 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]