===========================================틀린거
while (true)
{
IndexNum = rand() % 25;
SelectedNum = comtable[IndexNum];
if(comtable[IndexNum]!=0)
{
for (int i = 0; i < 25; i++)
{
if (usertable[i] == SelectedNum)
{
usertable[i] = 0;
break;
}
comtable[IndexNum] = 0;
break;
}
}
}
}
====================================================맞는거
while (true)
{
IndexNum = rand() % 25;
SelectedNum = comtable[IndexNum];
if(comtable[IndexNum]!=0)
{
for (int i = 0; i < 25; i++)
{
if (usertable[i] == SelectedNum)
{
usertable[i] = 0;
break;
}
}
comtable[IndexNum] = 0;
break;
}
}
}
for문 안에 comtable[IndexNum] = 0;
break;를 넣으면 컴퓨터 선택중..에서 값이 나오지않고, for문 밖에 comtable[IndexNum] = 0;
break;를 넣으면 올바른 값이 나오는데 왜 이런건가요?
안녕하세요 온라인게임아카데미 입니다.
문의하신 프로그래밍 관련 내용에 대하여 담당 강사님에게 전달하였습니다.
오후 6시 이전까지는 답변드릴 수 있도록 하겠습니다.
꿈을 이루시는 그날까지 함께 하겠습니다.
SGA온라인게임아카데미
--------------------------------------------------------------------------------------------------------------
안녕하세요 온라인게임아카데미 프로그래밍 강사 하민우 입니다.
반복문 내부에 break 구문을 사용할 때는 해당 break 가 어떤 반복문을 중단시키는 것인지 주의 깊게 보셔야 합니다.
우선 틀린거 라고 적어두신 내용을 보면 break; 2개가 모두 포문 안쪽에 자리 잡고 있습니다.
for (int i = 0; i < 25; i++)
{
if (usertable[i] == SelectedNum)
{
usertable[i] = 0;
break; -> 1번
}
comtable[IndexNum] = 0;
break; -> 2번
}
결국 두개 모두 포문을 중단 시키는 역할을 하기 때문에 해당 구문의 usertable[i] == SelectedNum 조건이 트루가 나온다면 1번을 통해서 포문이 중단 되고 펄스가 나온다면 2번을 통해서 정지가 됩니다.
결국 위 알고리즘은 반복문이 무조건 i = 0에서 중단 되기 때문에 기본적으로 문제가 있는 알고리즘 입니다.
그리고 선택 중에서 값이 나오지 않는 이유는 제대로 작성 된 알고리즘에서의 2번 브레이크는 while 반복문을 중단 시키는 역할을 하도록 작성이 되어 있는데 틀린 알고리즘에서는 for 반복문을 중단 시키는 역할로 쓰이고 있기 때문에 결국 while 반복문은 중단점이 없어서 무한 루프를 돌게 됩니다.
2중 이상의 반복문에서 break를 사용할 때는 해당 break가 어떤 반복문을 중단 시키는 역할을 하는지 꼭 확인 하시기 바랍니다.
또 공부하다가 궁금한점이 생기면 언제든지 질문 주시기 바랍니다.
감사합니다.