【问题标题】:command line processing outside of main in cc中main之外的命令行处理
【发布时间】:2016-04-29 00:18:06
【问题描述】:

我在处理 main 之外的命令行参数时遇到问题。当用户在命令行输入两个数字时,我的代码应该进行基本的数学运算。

例如“程序名称”-add 1 2 输出:3

主函数中唯一允许的函数是处理命令行参数然后进行基本添加的函数。尝试调用参数时出现错误。这是我的代码....

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

    void process(int args, char *argv[]);  //Used to process arguments from the command line.
    int add(int num1, int num2);
    int main()
    {
         process(args, *argv[]);
         return (0);
    }
    void process(int args, char *argv[])
    {
        int i;
        int num1 = 0;
        int num2 = 0;
        for (int i = 1; i < args; i++)
        {
            if (strcmp(argv[i], "-a") == 0 || strcmp(argv[i], "-add") == 0) // Line to get -a or -add switch to add two numbers.
            {
                 add(num1, num2);  //add function call
                 printf("%d");  // print result
            }
        }
    }
    int add(int num1, num2)
    {
         return num1 + num2;
    }

我得到的错误是 args 和 argv 未声明。关于如何仅使用 process 函数来完成此任务的任何想法?

【问题讨论】:

  • int main() --> int main (int argc, char *argv[])process(args, *argv[]); --> process(arc, argv);
  • printf("%d"); 将调用 未定义的行为 以获得参数的运气。
  • argv[n] 和 argv[n+1] 转换为 int 为 num1num2 然后 printf("%d\n", add(num1, num2));

标签: c command


【解决方案1】:
int main()
{
     process(args, *argv[]);
     return (0);
}

你认为args(按照惯例应该是argc)和argv来自哪里?

另外,为什么在将argv 传递给process() 时包含*[]?尝试真正理解你正在编写的代码,而不是仅仅复制/粘贴片段并按摩它们直到编译完成。

main 的定义不必包含它们,但您的程序需要它们。这样做:

int main(int argc, char *argv[])
{
     process(argc, argv);
     return 0;
}

【讨论】:

  • 这似乎是一个评论,而不是我的答案。
  • @MikeCAT 我晚了大约 19 秒才得到“答案”部分。
猜你喜欢
  • 2023-03-11
  • 2010-10-19
  • 2023-03-23
  • 2013-12-26
  • 1970-01-01
  • 2023-04-03
  • 2013-05-08
  • 2013-01-22
  • 2016-08-28
相关资源
最近更新 更多