我有一个程序(myprogram),该文件需要一个文件作为输入,并创建另一个文件作为输出。语法为:myprogram inputfile outputfile看起来像这样:int main ( int argc, char *argv[] ){...if ( argc != 3 ) { cout<<"wrong number of arguments"<< endl; return 1;} }myInputFile = argv[1];myOutputFile = argv[2];...}所以在这里我以argv[1]作为输入文件,现在我想在语法中添加一些选项。因此,例如,我想要myprogram -a inputfile outputfile作为选项。选项的数量会有所不同。这意味着文件名将取决于参数的数量。在代码中最聪明的方法是什么?我可以看到一个人只会将最后两个参数作为文件名,然后假定在该参数之前的参数是选项(例如myInputFile = argv[argc - 1]之类的东西。这不太正确,因为我最终会遇到很多语句。所以我的问题是:如何最好地处理可变数量的参数? 最佳答案 如果您不想使用库,该怎么办:char* myInputFile = NULL ;char* myOutputFile = NULL ;bool option_a = false ;int argi = 1 ;while ( argi < argc ){ const char* args = argv[ argi++ ] ; switch ( *args ) { case '-' : /* option/switch */ if ( strcmp( args, "-a" ) == 0 ) option_a = true ; else { std::cerr << "Unknow option " << args << "\n" ; exit( 1 ) ; } break ; default : if ( myInputFile == NULL ) myInputFile = args ; else if ( myOutputFile == NULL ) myOutputFile = args ; else { std::cerr << "Unexpected argument " << args << "\n" ; exit( 1 ); } break ; }}最后,当您处理所有参数时,您可以进行一些最终检查,例如,测试是否设置了输入文件和输出文件:if ( myInputFile == NULL ){ std::cerr << "Input file missing!\n" ; exit( 1 ) ;}...您还可以将所有参数放入一个结构中,而不用将它们分开:struct options_t{ char* myInputFile ; char* myOutputFile ; bool option_a ; options_t() : myInputFile(), myOutputFile(), option_a() {}} ;这样,您可以将所有参数传递给函数,而不必一一列出。只是一个想法...关于c++ - C++中可变数量的命令行参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23090974/