C,帮助继续..?在while循环中 - 多项式ADT

问题描述

coef为0的时候,我用continue不打印,但是只有printTerm(a)出来,printTerm(b)部分不出来。

当我删除(if & continue)语句时,同时出现printTerm(a)和printTerm(b),看来这里的(if & continue)语句有问题。

我该如何解决这个问题?

int main() {
    a[0].coef = 2;
    a[0].expon = 1000; // 2x^1000
    
    a[1].coef = 1;
    a[1].expon = 2; // x^2
    
    a[2].coef = 1;
    a[2].expon = 0; // 1
    
    b[0].coef = 1;
    b[0].expon = 4; // x^4
    
    b[1].coef = 10;
    b[1].expon = 3; // 10x^3
    
    b[2].coef = 3;
    b[2].expon = 2; // 3x^2
    
    b[2].coef = 1;
    b[2].expon = 0; // 1
    
    printTerm(a);
    printTerm(b);
    
    return 0;
}

void printTerm(polynomial *p) {
    int i=0;
    printf("polynomial : ");
    while(p[i].expon != -1) {
        if(p[i].coef == 0) continue;
        printf("%dx^%d",p[i].coef,p[i].expon);
        i++;
        if(p[i].expon != -1 && p[i].coef > 0) printf(" + ");
    }
    printf("\n");
}

解决方法

因为只有在 i 不等于 0 时才增加 p[i].coef。 如果 p[i].coef == 0 它跳过增量部分并且函数陷入无限循环,总是检查相同的数组项。


编辑: 解决这个问题的方法: 而不是 if(p[i].coef == 0) continue; 使用:

if (p[i].coef == 0) 
{
  i++;
  continue;
}

这种方式 while 循环会评估下一个数组项,而不是卡在同一项上。