没有先前的if错误

时间:2013-11-28 12:34:20

标签: c++ if-statement

void repfunc(int (&number)[9],int(&m_no)[9],int (&stock)[9],int &size){

    FOR(i, 9-size, 9){

        stock_update(m_no,stock,size);


        if(number[i]==0){
            INCR(m_no,stock,i);
            FOR(z, i, 9){
                m_no[z]=small_in_stock(stock,1);
                int temp3=m_no[z];
                ++stock[temp3-1];
            }
            print(m_no);
            return;
        }

        int temp=number[i];

        else if(stock[temp-1]==0){
            m_no[i]=number[i];
            ++stock[temp-1];
            print(m_no);
        }
        else{
            int temp2=small_in_stock(stock,temp);

                if(temp2>0){
                    stock_clear(m_no,stock,i+1);

                    FOR(z, i, 9){
                        m_no[z]=small_in_stock(stock,1);
                        int temp3=m_no[z];
                        ++stock[temp3-1];
                    }

                }

                if(temp2<0){
                    if((i-1)<8-size){
                        INCR(m_no,stock,i-1);
                        size++;
                    }
                        FOR(z, i, 9){

                            m_no[z]=small_in_stock(stock,1);

                            int temp3=m_no[z];
                            ++stock[temp3-1];
                        }
                    print(m_no);
                    return;

                }
        }
    }
}

我的编译器在else if if部分中给出了没有先前if else的错误。

if(number[i]==0){
            INCR(m_no,stock,i);
            FOR(z, i, 9){
                m_no[z]=small_in_stock(stock,1);
                int temp3=m_no[z];
                ++stock[temp3-1];
            }
            print(m_no);
            return;
        }

        int temp=number[i];

        else if(stock[temp-1]==0){
            m_no[i]=number[i];
            ++stock[temp-1];
            print(m_no);
        }

可以清楚地看到if部分。是否由于两者之间的声明。但是为什么声明会引起问题呢?如何绕过它?

8 个答案:

答案 0 :(得分:4)

int temp=number[i];设置为无效的帖子。移到ifelse内。

答案 1 :(得分:3)

if (...) {

}

int temp=number[i];

else if (...

定义int temp = number[i];位于上一个if之后,并阻止else属于它,或其他任何内容。因此错误。您必须在if语句之前移动定义,否则重新考虑逻辑。

答案 2 :(得分:2)

让我们看一下发生错误的代码:

if(number[i]==0){
    ....
}
int temp=number[i];
else if(stock[temp-1]==0)
{
    ....
}

如果是紧跟在else之后的语句,则只能使用if。事实并非如此。您已声明了一个新变量temp

答案 3 :(得分:2)

声明:

int temp=number[i];

处于错误的位置。

if() {
   ...
}

现在必须立即:

else { ... }

如果还有其他声明,则表示您不在if - 阻止范围内且不允许else

答案 4 :(得分:2)

导致问题的原因仅仅是因为它破坏了语言的语法规则。如果else块之后没有立即,编译器会假定没有if块。你可以把空格放在两者之间,但绝对没有别的。

您有4种可能性可以放置该声明行:

  1. 在整个if / else结构之前。
  2. 整个if / else结构之后。
  3. if区块内。
  4. else区块内。
  5. 我建议使用第一个,或者可能是第四个(取决于您之后是否使用temp变量)。

    如果您从逻辑上考虑它,尝试在ifelse块之间放置声明是没有意义的。它使得不清楚它是否以及何时实际执行与控制结构的其余部分有关。

答案 5 :(得分:1)

if(number[i]==0){
            INCR(m_no,stock,i);
            FOR(z, i, 9){
                m_no[z]=small_in_stock(stock,1);
                int temp3=m_no[z];
                ++stock[temp3-1];
            }
            print(m_no);
            return;
        }

// int temp = number [i]; - &GT;&GT;&GT;&GT;将此陈述置于另一个适当的位置。 // else block shold跟随if块

 else if(stock[temp-1]==0){
            m_no[i]=number[i];
            ++stock[temp-1];
            print(m_no);
        }

所以代码应该是

if(number[i]==0){
                INCR(m_no,stock,i);
                FOR(z, i, 9){
                    m_no[z]=small_in_stock(stock,1);
                    int temp3=m_no[z];
                    ++stock[temp3-1];
                }
                print(m_no);
                return;
            }

     else if(stock[temp-1]==0){
                m_no[i]=number[i];
                ++stock[temp-1];
                print(m_no);
            }

根据您的逻辑将 int temp = number [i]; 放置

答案 6 :(得分:1)

将此行放在其他位置。

int temp=number[i];

其次,else必须紧接在if的结束括号之后。在您的情况下,它是在if结束括号后的声明。

答案 7 :(得分:0)

这打破了if-else语句的语法。您应该在if-else语句之外移动声明。