C do-while-do Loop

时间:2017-02-08 15:42:50

标签: c loops

我想知道为什么C中没有do-while-do循环。我很自然地写道:

$connect = ldap_connect("ldap://".$ldap_server);
$auth_user = 'CN=XXX,OU=XXX,DC=XXX,DC=com';
$bind = ldap_bind($connect, $auth_user , $auth_pass);

但我必须通过写作来模拟:

$bind = ldap_bind($connect, 'YourDomaine\\'.$auth_user , $auth_pass);

2 个答案:

答案 0 :(得分:1)

你抱怨你的循环最自然的结构将涉及在中间测试循环谓词。实际上,无论是C还是我所知道的任何其他语言都没有直接的语法支持,但实现它有很多方法。我倾向于将您的特定代码编写为

--y;
while (y - 3 != -1) {
    oGrid->ooPiece[x][y] = oGrid->ooPiece[x][y - 3];
    --y;
}

,或通过@StoryTeller提供的类似for循环。在第一次测试循环谓词之前,这确实重复了循环的一部分,但在这种情况下它仍然非常干净。

如果你想完全避免代码重复,这不是不合理的,那么你可以通过将循环退出放在中间来实现:

while (1) {
    --y;
    if (y - 3 == -1) break;
    oGrid->ooPiece[x][y] = oGrid->ooPiece[x][y - 3];
}

或者在这种特殊情况下,虽然不是一般情况,但您可以将谓词测试之前的代码合并到谓词测试中:

while (--y - 3 != -1) {
    oGrid->ooPiece[x][y] = oGrid->ooPiece[x][y - 3];
}

答案 1 :(得分:0)

您在迭代中使用for循环获得完全相同的y值。

for(--y; y > 2; --y) {
  oGrid->ooPiece[x][y] = oGrid->ooPiece[x][y - 3];
}