1
if(turn==2)
{
    if(forward)  /*then what to do if this if comes true for coming out of outer loop*/
        if(columnHead>0)
            {
            columnHead--;
            addr[columnHead] |=1<<(rowHead-1);
            }
        else
            {
            columnHead =7;
            addr[columnHead] |=1<<(rowHead-1);
            }
    if(rowTail!=(rowHead-1))
        {
        addr[columnHead+columnSize] &=~(1<<rowTail);
        columnSize++;
        rowTail++;
        }
    else
        {
        addr[columnTail] &=~(1<<columnTail);
        if(columnTail==0)columnTail=8;
        columnTail--;
        }
    back=1;
}

if如果满足条件,我想退出外循环if(forward)

4

6 回答 6

8

您应该创建此代码的函数,并从条件为真的块返回。

于 2013-06-18T11:54:19.677 回答
2

一个标准的习惯用法是while(true){/*your code here*/ break; }在整个块周围使用并根据需要使用break语句,这将带您到 while 大括号的末尾。请记住包含 final break,否则您的程序将循环。

无论您做什么,都不要使用 goto,因为它们被认为是非常糟糕的编程风格。

有些人,从 C 时代开始while(true)会发出编译警告,for(;;)而是使用。

奇怪的是,再想一想,你可以使用

do {
 /*your code here, using break for premature exit*/
} while (false);

不需要 final break。只有我在生产代码中从未见过这种情况。

于 2013-06-18T11:49:31.453 回答
1

我想只要把一个else放在那里就可以了。另外,请在大块周围放置大括号 - 它使else部分明确。

if(turn==2)
{
    if(forward) {
        if(columnHead>0)
            {
            columnHead--;
            addr[columnHead] |=1<<(rowHead-1);
            }
        else
            {
            columnHead =7;
            addr[columnHead] |=1<<(rowHead-1);
            }
    } else {
        if(rowTail!=(rowHead-1))
            {
            addr[columnHead+columnSize] &=~(1<<rowTail);
            columnSize++;
            rowTail++;
            }
        else
            {
            addr[columnTail] &=~(1<<columnTail);
            if(columnTail==0)columnTail=8;
            columnTail--;
            }
        back=1;
    }

}

作者评论后的版本:

if(turn==2 && !forward) {
    if(rowTail!=(rowHead-1))
        {
        addr[columnHead+columnSize] &=~(1<<rowTail);
        columnSize++;
        rowTail++;
        }
    else
        {
        addr[columnTail] &=~(1<<columnTail);
        if(columnTail==0)columnTail=8;
        columnTail--;
        }
    back=1;
}
于 2013-06-18T11:50:15.397 回答
0

为什么首先进入“如果”。

将外部更改为:

if(turn==2 && forward) //not sure if your logic required `forward` or `!forward` you were ambiguous 
{
    //...
}
于 2013-06-18T12:33:19.203 回答
0

你可能不得不去另一个方向,这意味着:你不想检查是否 if(forward)是真的,而是你想做if(!forward)

尽管您需要检查 forward 是什么类型。我想这是一个整数。

于 2013-06-18T11:50:58.353 回答
0

您可以尝试在需要退出的时候给出return 0;或,在此之前,您可能希望将整个代码放在一个函数中,例如 -return something;ifc syntax

    (int)someFunction(int turn, int forward, 
int columnHead, int rowHead, int rowTail, int columnTail)/*have all the arguments with proper types declaration*/{
    //your code with return 0;
    }.
于 2013-06-18T11:52:12.283 回答