Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;在linux终端中有负号(-)的吗?_C++_Linux_Parsing_Command Line_Command Line Arguments - Fatal编程技术网

C++ 如何在C++;在linux终端中有负号(-)的吗?

C++ 如何在C++;在linux终端中有负号(-)的吗?,c++,linux,parsing,command-line,command-line-arguments,C++,Linux,Parsing,Command Line,Command Line Arguments,我需要这个做作业。我知道C++中标准命令行输入是如何工作的。如果我有一个名为training的可执行文件,那么我可以在terminal中编写以下行: ./training input.text output1 output2 在这种情况下,我的主要方法如下: int main( int argc, char* argv[] ){ take_input( argv[1] ); make_output( argv[2], argv[3] ); } int take_input

我需要这个做作业。我知道C++中标准命令行输入是如何工作的。如果我有一个名为training的可执行文件,那么我可以在terminal中编写以下行:

./training input.text output1 output2
在这种情况下,我的主要方法如下:

int main( int argc, char* argv[] ){
     take_input( argv[1] );
     make_output( argv[2], argv[3] );
}
int take_input( string filename );
int make_output( string filename, string filename2 )
我的函数声明如下:

int main( int argc, char* argv[] ){
     take_input( argv[1] );
     make_output( argv[2], argv[3] );
}
int take_input( string filename );
int make_output( string filename, string filename2 )
但是,我需要按如下方式编写命令行:

training -i input.csv -os output1 -oh output2

我不知道如何修改。非常感谢您的帮助。

在Linux上,您只需包括
unistd.h
并使用它。

getopt()
就可以了,但是如果您的需求很小并且不想添加外部依赖项,您可以编写自己的小助手函数来查找破折号关键字在
argv
数组中的位置,如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Returns the index of the specified keyword (e.g. "-oh")
// or returns -1 if the keyword doesn't exist
static int find_keyword(int argc, char *argv[], const char * keyword)
{
   for (int i=0; i<argc; i++)
   {
      if (strcmp(argv[i], keyword) == 0) return i;
   }
   return -1;
}

int main( int argc, char* argv[] )
{
   const int iIndex = find_keyword(argc, argv, "-i");
   if (iIndex < 0) {printf("No -i keyword found!  Exiting!\n"); exit(10);}

   const int osIndex = find_keyword(argc, argv, "-os");
   if (osIndex < 0) {printf("No -os keyword found!  Exiting!\n"); exit(10);}

   const int ohIndex = find_keyword(argc, argv, "-oh");
   if (ohIndex < 0) {printf("No -oh keyword found!  Exiting!\n"); exit(10);}

   take_input( argv[iIndex+1] );
   make_output( argv[osIndex+1], argv[ohIndex+1] );
}
#包括
#包括
#包括
//返回指定关键字的索引(例如“-oh”)
//如果关键字不存在,则返回-1
静态int find_关键字(int argc,char*argv[],const char*关键字)
{

对于(inti=0;iLook up
getopt
),它是GNU编译器中内置的一个库。如果有人能提供修改,那将很有帮助,不过我正在学习get opt。非常感谢Jeremy,这非常有帮助。