我正在用 C 编写一个程序,其中有几个参数,我可以在运行它时在命令行中输入这些参数。例如:
./proj select row 3 <table.txt
打印第 3 行。
在我的程序中,我有很多 if
/else
。例如,如果 argv[1] 为 select 并且 argv[2] 为 row,则执行此操作,依此类推。我向老师展示了它,并被告知不要使用 if-else 来执行此操作,而是使用结构。问题是我不知道该怎么做。您能给我一些关于如何开始的简单建议吗?
最佳答案
使用getopt
处理命令行选项。这是一个例子:
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
就你的情况而言,我认为是这样的:
./proj -r 3 <table.txt
会很好。因此,在 getopt while 循环中,您将检查“r”参数并存储其值。然后在您的代码中使用该值。像这样的东西:
int row_num = -1;
while ((c = getopt (argc, argv, "r:")) != -1)
switch (c)
{
case 'r':
row_num = optarg;
break;
case '?':
if (optopt == 'r')
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
else if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf (stderr,
"Unknown option character `\\x%x'.\n",
optopt);
return 1;
default:
abort ();
}
printf ("row_num = %d\n", row_num);
/* Now use your row_num variable here. */
return 0;
}
请注意,您也可以将输入文件的名称作为参数,这样您就不必像现在一样通过管道将其输入。像这样的东西:
./proj -r 3 -f table.txt
您会在 Internet 上找到更多 getopt 示例。
关于c - 命令行参数和结构体参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26868030/