我想在我的c程序中添加-r选项。因此,当它在终端的命令行中使用时,它将触发我的程序的不同操作。如何告诉我的c程序,当它看到文本-r时,它会跳转到将执行该替换功能的代码片段?
到目前为止我做了什么: 到目前为止,我已经设置了我的c程序来处理文件,但没有选项,所以我的程序能够以这种方式处理文本文件,它以某种方式格式化文本文件并将其打印出stdout:
./ p4.out< sometextfile
./ p4.out sometextfile
来自C by Discovery by Foster我通过使用FILE指针和以下内容找出了如何做到这一点 主程序的形式:
void main(argc, char *argv[])
在我的代码中,我有if语句来指示是否有要处理的输入文件或只是通过以下if语句从标准输入读取:
if(argc == 1){
//do something with standard in (stdin)
}
if(argc == 2){
//do something with one file parameter (sometextfile)
}
我要添加的功能: 特别是我的c程序应该能够采用这样的参数:
./p4.out -r
./p4.out -r sometextfile
./p4.out sometextfile -r
-r功能应该由我的主程序读取,然后指示文本文件中的字符应该颠倒。发现第二版的C没有提到如何为c程序添加选项,所以我不知道该怎么做。
答案 0 :(得分:2)
您要么计算出特定程序的逻辑,要么使用类似于此处所述的库:http://www.gnu.org/software/libc/manual/html_node/Parsing-Program-Arguments.html#Parsing-Program-Arguments
答案 1 :(得分:2)
您可以通过迭代用户在 argv 数组中提供的参数,将它们与您的参数值进行比较,并设置标志以指示已使用参数来实现此目的。
int reverse = 0;
const char* file = NULL;
for( int i = 1; i < argc; i++ )
{
if( strcmp( argv[i], "-r" ) == 0 )
{
reverse = 1;
}
else
{
file = argv[i];
}
}
if( reverse )
{
// Reverse the text
}
else
{
// Do something else
}
答案 2 :(得分:2)
取自gnu.org
如果程序的命令行参数的语法足够简单,您可以简单地从argv中手动选择参数。但除非你的程序采用固定数量的参数,或者所有参数都以相同的方式解释(例如文件名),否则通常最好使用getopt(参见Getopt)或argp_parse(参见Argp)进行解析。
答案 3 :(得分:0)
如果您使用cc命令或gcc简单编译程序,则默认情况下可执行文件名为a.out。如果要在编译时删除该文件,可以提供所需的任何名称。第二件事./表示您当前的目录。我不知道如何在不使用./的情况下执行。 可能对你有帮助