루프의 가장 자연스러운 구조에는 중간에 루프 조건자를 테스트해야한다는 불만이 있습니다. 실제로 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];
}
그래서 당신의 질문은 무엇입니까? 왜 안하는거야? 대부분의 언어에서 do while 루프의 표준 형식입니다! 그것은 디자인입니다. 같은 일을 할 것입니다 – minigeek
"커피를 가져 오십시오."라고 쓰는 것이 당연합니다. 그러나 어떤 이유로 C는 그것을 이해하지 못합니다. 왜? –
do-do-do-loop가있는 언어는 무엇입니까? (호기심이 생기고 그 전에 결코 만난 적이 없으며 첫 번째 코드가 무엇을 할 지 전혀 몰랐습니다.) – Mat