读入命令行参数以确定多项式

时间:2018-10-01 16:43:51

标签: c command-line polynomials

我正在使用C语言读取大小未知的命令自变量,并确定多项式的系数,其范围和多项式的阶数。我将使用系数来重构多项式并对其进行数值分析,但是我在读取命令行参数时遇到了问题。

例如;

./文件名1.4 2.2 3.3 4.45 5.65 12 14

其中1.4 2.2 3.3 4.45 5.65是多项式的系数,而12和14是多项式的范围。

我已经为此苦了一段时间,并且能够实现利用fgets的代码,然后运行for循环来计算字符串中的空格数,以确定多项式的度数和系数的数目,但这代码利用了终端,我觉得那是错误的方法。

我敢肯定这与指针有关,但是我一直很难掌握这个概念

我很好奇我是否需要按如下所示运行for循环

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

#define EPSILON 0.01

void main(int argc, char *argv[]){
    int i,count;
    float a,b,c;

    count =0;

    for(i=1;i<argc;i++){
    if(argc != '\0')
    count++;
    }

    deg = count - 2;

    b= argv[count];
    a= argv[count -1];

    for(i=1;i<=deg;i++){
    str[i] = argv[i];
   }

}

在这一点上,我非常傻眼,任何向正确方向提出的建议都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您需要逐步进行此操作。

首先明确定义命令行的格式。例如,我们可以说存在程序名称(argv[0]),n系数和两个数字,约束为n > 0。因此,我们有argc > 3n = argc - 3

代码需要首先检查命令行并将其内容提取到适当类型的变量中。

目前,您不再使用字符串。您可能需要执行其他输入验证。

最后,您可以处理输入。

void usage ()
{
    fprintf (stderr, "usage: ...");
    exit (EXIT_FAILURE);
}

int main (int argc, char **argv)
{
    // process command line arguments
    if (argc <= 3) {
        usage ();
    }

    int n = argc - 3;

    // The coefficients are stored from right to left so that
    // coeff[i] is the coefficient of x^i
    double coeff[n];

    double range1, range2;

    for (int i = 0; i < n; i++) {
        // FIXME: use strtod instead of atof to detect errors
        coeff[n - i - 1] = atof (argv[i + 1]);
    }
    range1 = atof (argv[n + 1]);
    range2 = atof (argv[n + 2]);

    // At this point, you work only with n, range1, range2 and coeff.

    int deg;

    if (n > 1) {
        deg = n - 1;
    }
    else if (coeff[0] != 0) {
        deg = 0;
    }
    else {
        // the degree of the 0 polynomial is not defined
        ...
    }
    ...
}