c - 使用 argv[] 从命令行中提取数字集

标签 c

**如果您对解释我的推理的背景信息不感兴趣,请跳到问题的最底部。

我有一组多项式方程,我需要读入我的程序来执行多项式的单元测试,例如

  • 合成师
  • 添加
  • 减法
  • 规模
  • 乘法

所以我需要能够输入范围广泛的数字来测试 BRLCAD 中使用的功能,尽管我很难想出一个有效的解决方案来读取数字。我目前的做法:

给定命令行:

./unit_test sd 2 3 4 8 1 4 5

  • sd - 进行合成 split
  • 2 - 第一个多边形的度数
  • 3,4,8 - 3x^2 + 4x + 8
  • 1 - 第二多边形的度数

编写一个算法来读取这种格式的一组数字是很麻烦的,而且让其他人理解起来很困惑,而且我还没有实现其他两个多项式来读取作为要与之比较的答案。(因为这是一个开源文件,我希望我的工作具有一定的透明度)。

if(strcmp(argv[1],"sd") == 0){

    poly_eqn1.dgr = atoi(argv[2]);
    /* start at argv[3], run degree count plus one times */
    for(counter = 0; counter < (eqn1.dgr + 1); counter++)
        poly_eqn1.cf[counter] = atof(argv[counter+3]);

    poly_eqn2.dgr = atoi(argv[4 + poly_eqn1.dgr]);
    /* start at end of degree one counter */
    for(counter = 0; counter < (dgr2 + 1); counter++)
        poly_eqn2.cf[counter] = atof(argv[counter+5+dgr]);

    /* grab the answer from end of data */

    return test_synthetic(//input proper data...);
}

如果设置了最大次数,使用 sscanf 读取我的多项式会更有效吗? 在编写初始方法后,我考虑过使用 sscanf,但我不确定以这种方式使用它是否值得,而不是从上面写两个更多的多项式读入:

给定多项式的最大次数为四

./unit_test sd 2,0,0,2,4,5 1,0,0,0,2,3

  • 2,0,0,2,4,5 - 2 阶,0x^4 + 0x^3 + 2x^2 + 4x + 5

最佳答案

如果我是你,我会努力以人类可读的格式支持你的参数。

例如,应该可以解析以下形式的输入:

./unit_test "(3*x^2+4*x+8)/(4*x+5)"

当然,您可能必须编写词法解析器才能理解此输入,但从用户的角度来看,这将是最容易理解的。

关于c - 使用 argv[] 从命令行中提取数字集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13964614/

相关文章:

c - 如何修改s_client的代码?

c - 使用 strcpy 在 C 中出现段错误

c - 为什么 wait4() 被 waitpid() 取代

c 管道读取字符串为空

c - 理解 C 中的 For 循环

将无符号小数更改为基数 2^n

c - (几乎)用于开关的非冲突简单哈希函数

c - 将项目添加到C中的空数组并获取数组长度

c - C 有本地绑定(bind)吗?

c++ - 如何确定机器上的硬件(CPU 和 RAM)?