导致C中无限循环的逻辑错误

时间:2015-05-05 00:02:19

标签: c arrays infinite

我正在研究基础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++;
    }

}

3 个答案:

答案 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条件没有得到满足。