导致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 条件。
我正在使用基本 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 条件。