我正在使用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];
}
}
在这一点上,我非常傻眼,任何向正确方向提出的建议都将不胜感激。
答案 0 :(得分:2)
您需要逐步进行此操作。
首先明确定义命令行的格式。例如,我们可以说存在程序名称(argv[0]
),n
系数和两个数字,约束为n > 0
。因此,我们有argc > 3
和n = 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
...
}
...
}