20.03.31 23:21 작성
·
222
0
int iStar1 = 0, iStar2 = 0;
for (int i = 0; i < 5; ++i)
{
iStar1 = iStar2 = 0;
for (int j = 0; j < 5; ++j)
{
if (iNumber[i * 5 + j] == INT_MAX)
++iStar1;
}
if (iStar1 == 5)
++iBingo;
}
맨 위에 iBingo를 0으로 초기화 하는 이유는 직접 실행해보고 알았습니다.
그런데 iStar1, 2를 0으로 초기화 안하면 어떻게 되는지 궁금해서 저 라인을 지우고 실행해 봤더니 첫줄 *이 5개가 채워지기 전까지
**iii
iiiii
iiiii
iiiii
이런 상황에선 빙고라인이 0이었다가 5개가 채워지는 순간
*****
iiiii
iiiii
iiiii
iiiii
빙고라인이 5가 되고 그 이후 *이 추가되는 순간
*****
*iiii
iiiii
iiiii
iiiii
빙고라인이 1이 되서 아무리 *을 늘려도
*****
*****
*****
****i
iiiii
빙고라인이 1에서 변하지 않던데요.
이부분이 논리적으로 왜그렇게 되는건지 이해가 가질 않아서요...iStar를 매번 초기화 하는것과 않는것에 프로그램상 어떤 차이가 생기는 건가요?
저 코드의 순서가 for i 문에 들어가서 i는 0일때 j 는 0~4까지 실행하고 ++bingo까지 실행한뒤 다시 i=1일때로 반복하는 구조라서 그런건지. 그렇다고 해도 빙고가 5가 되었다가 다시 1로 바뀌는 이유를 도저히 모르겠습니다.
답변 1
0
1번째 줄의 iStar1, iStar2 = 0 한 이유는 당연히 사용자가 입력할 때마다 초기화 해줘야 해서 한거구요.
4번째줄에서 0으로 초기화 시킨 이유는요,
첫번째 for구문이 가로줄이 전체가 *일때를 구분하기 위해서 5번돌리는건데 첫번째줄이 *로 가득차서 iStar 이 5가되면 ++iBingo를 수행하게 됩니다. 그런데 0으로 초기화를 안해주고 첫번째 for구문이 다시 실행되면서 두번째 가로줄 체크할때도 iStar는 5인상태에서 실행되구요, 세번째가로줄 체크할때도 iStar은 5입니다. 그래서 5번째줄까지 체크해도 iStar은 5이기때문에 if문에 의하여 계속 ++iBingo가 된거에요. 즉 Bingo line이 다섯번 추가되었기 때문에 5라고 출력되는거겠죠.