我想知道为什么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);
答案 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];
}