왜 반복 횟수가 정해지지 않은 경우는 while 반복문으로만 나타내는지에 대한 의문이 들어, 직접 for 반복문으로 반복 횟수가 정해지지 않은 경우의 코드를 작성해보았습니다. 코드의 내용은 다음과 같습니다.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(NULL));
int i=0;
for (; i != 3; i = rand() % 10);
{
printf("%d\n", i);
}
return 0;
}
---
실행결과 값이 3으로 뜨는데, 왜 그런 것인지 궁금합니다.
제가 for 반복문 뒤에 ;를 붙여서 오류가 났었습니다. 답변감사드립니다. 하나 더 여쭙자면, for하고 while 조건문 모두 반복획수가 정해져 있지 않을 때 사용이 가능한데 굳이. while 반복문이 반복 회수가 정해져 있지 않을 때 유용하다고 (356p)에 언급하신 이유가 궁금합니다!
while은 논리적인 조건에 따라 실행하고, 횟수를 미리 판단할 수 없을 때 주로 사용합니다.
for는 대부분 반복 횟수가 미리 판단가능할 때 사용합니다.
for는 카운터 변수의 초기화, 조건식, 변화식을 하나로 모을 수 있다는 편리함이 있습니다.
대부분의 언어는 이러한 용도로 구분하고 있기 때문에 for, while을 지원합니다.
프로그래머들의 오랜 논쟁이자 가장 쓸모없는 논쟁이 for, while 중에 무엇이 더 빠른가, 왜 for(;;)이 가능한데 while(1)을 쓰는가 같은 게 있습니다. 무시하세요. 컴파일러는 어떤 코드를 써도 같은 어셈블리 코드를 씁니다. 어지간히 멍청한 컴파일러가 아니라면 말이죠(불행히도 대부분 20년 이내의 컴파일러들은 이 정도 최적화를 알아서 해줍니다).
반복 횟수를 알고 있다면 for를 사용하고,
반복횟수를 미리 알 수 없을 때 while을 사용합니다.(물론 for도 반복횟수를 알 수 없을 때 쓸 수 있지만, 코드가 지저분해집니다.)
예를 들어 메뉴에서 사용자가 q를 입력할 때만 종료하는 코드를 작성한다면 for보다 while로 작성하는 게 유리합니다.
while과 do while로 마찬가지로 이유가 다릅니다. do while은 반드시 한 번은 실행하는 코드에 사용합니다. while은 한 번도 실행되지 않을 수 있지만, do while은 반드시 한 번은 실행되기 때문에 메뉴를 출력하고 선택을 기다리는 경우에 사용자가 q로 종료하지 않는다면 메뉴 출력을 반복하면서 선택을 입력받을 수 있습니다.
C 언어 매크로에서는 do while을 이용해 코드를 작성하기도 하지만, 이는 고급 주제이므로 C 언어로 임베디드쪽 실무를 한다면 자주 접하게 될 겁니다.