c - 命令行参数和结构体参数

标签 c struct command-line-arguments

我正在用 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/

相关文章:

python - 如何用等效文件内容的python字符串替换文件名的命令行参数

c - 按位运算符的幂 2 的模数?

c - 处理结构中的字符串

python - 如何传递文件中包含的命令行参数并保留该文件的名称?

php - 如何将文件作为参数传递给 php exec?

c - 如何通过偏移获取/设置结构成员

c - 在不对数组进行排序的情况下查找中位数

c - 链表中队列的实现

c - 为什么在使用指针的函数中更改此数组的值是错误的?

c++ - 为什么C++既有类又有结构?