我正在研究基础C类中的一个项目,该项目涉及从文件中读取多项式方程,获取导数,并将导数输出回另一个文件。
我正在对我的第一个函数(在main之后)保存文件输入的数组进行解析,并且有一个很大的while循环,理论上应该在数组中移动并基本弄清楚什么是在该数组中,就多项式而言。目标是将系数和指数放入两个数组中的一个,一个用于正指数,一个用于负指数,其中元素数表示指数和该数组元素内部系数的值。
我们遇到的问题是,由于某种原因,exponent变量永远不会被赋值。我们认为这是由于if语句中某处可能存在逻辑错误,但我们似乎无法确定它是什么。任何帮助将不胜感激。
#include <stdio.h>
#include <string.h>
void function1 (char *, double *, double *);
void function2 (char *, double *, double *);
int main(void)
{
char input [40];
double neg_part[11], pos_part[11];
double cos[11], sin[11], tan[11];
int i=0;
for (i;i<11;i++)
{
neg_part[i]=0;
pos_part[i]=0;
}
FILE *ifp = fopen("functions.txt","r+"), *ofp = fopen("derive.txt","w");
do
{
if (ifp)
while (!feof(ifp))
{
fgets(input, 40, ifp);
function1(&input, &neg_part, &pos_part);
function2 (&input, &neg_part, &pos_part);
}
}while(!feof(ifp));
}
void function1(char *inputptr, double neg_part[], double pos_part[])
{
int exponent, i=0;
double xcoef;
while (*inputptr!='\n')
{
if (isdigit(*(inputptr)))
{
if (*(inputptr+1)==' '|| *(inputptr+1)=='-' || *(inputptr+1)=='+')
{
xcoef= strtol(inputptr, &inputptr, 10);
exponent=0;
pos_part[exponent]=xcoef;
}
else if (*(inputptr+1)=='x')
{
xcoef= strtol(inputptr, &inputptr, 10);
if (*(inputptr+1)== '^')
{
inputptr+2;
exponent=strtol(inputptr, &inputptr, 10);
}
else if(*(inputptr+1)==' ' || *(inputptr+1)=='-' || *(inputptr+1)=='+')
{
exponent=1;
}
}
}
if (!isdigit(*inputptr))
{
if (*inputptr=='x')
{
xcoef=1;
if (*(inputptr+1)=='^')
{
exponent= strtol(inputptr, &inputptr, 10);
}
else if (*(inputptr+1)=='+' || *(inputptr+1)=='-' || *(inputptr+1)==' ')
exponent= 0;
}
}
if (exponent>=0)
{
pos_part[exponent]=xcoef;
}
else if(exponent<0)
{
exponent=exponent*(-1);
neg_part[exponent]=xcoef;
}
i++;
}
}
答案 0 :(得分:1)
while (*inputptr!='\n')
inputptr没有移动。有inputptr+2;
。您的意思是inputptr+=2
将inputptr增加2吗?
答案 1 :(得分:0)
你有一个声明:inputptr+2;
,在逻辑上什么都不做。也许你的意思是inputptr+=2
,它将inputptr递增2?
答案 2 :(得分:0)
我会逐行打印“here”或其他声明来查看代码实际到达的位置。如果它从未在任何内部if语句中打印出“here”,那么可能你的while条件没有得到满足。