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

Logical error causing infinite loop in C

我正在使用基本 C class 开发一个项目,该项目涉及从文件中读取多项式方程、求导数并将导数输出回另一个文件。

我在我的第一个函数(在 main 之后)中对包含文件输入的数组进行解析,并且有一个很大的 while 循环,理论上应该遍历数组并基本上找出就多项式而言,该数组中的所有内容是什么。目标是将系数和指数放入两个数组之一,一个用于正指数,一个用于负指数,其中元素编号表示该数组元素内的指数和系数值。

我们 运行 遇到的问题是,由于某种原因,指数变量从未被赋值。我们认为这是由于 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++;
    }

}

你有一个语句:inputptr+2;,逻辑上它什么都不做。也许您的意思是 inputptr+=2,它将 inputptr 递增 2?

祝你好运。我想看看这段代码,看起来很棒!

while (*inputptr!='\n')

inputptr 不动。有 inputptr+2;。您是说 inputptr+=2 将 inputptr 增加 2 吗?

我会逐行打印出 "here" 或其他语句来查看您的代码实际到达的位置。如果它从未在任何内部 if 语句中打印出 "here",那么可能不满足您的 while 条件。