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部分。是否由于两者之间的声明。但是为什么声明会引起问题呢?如何绕过它?
答案 0 :(得分:4)
int temp=number[i];
设置为无效的帖子。移到if
或else
内。
答案 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种可能性可以放置该声明行:
if
区块内。else
区块内。我建议使用第一个,或者可能是第四个(取决于您之后是否使用temp
变量)。
如果您从逻辑上考虑它,尝试在if
和else
块之间放置声明是没有意义的。它使得不清楚它是否以及何时实际执行与控制结构的其余部分有关。
答案 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语句之外移动声明。