티스토리 뷰

이전글 : [깅깅의 C# 독학] 3.C# 기본 - 조건분기 : if문과 switch문

 

[깅깅의 C# 독학] 3.C# 기본 - 조건분기 : if문과 switch문

개인적으로 코딩의 핵심이라 생각하는 대목! 바로 조건분기다. 내가 가장 좋아하는 구간이기도 하다. 먼저 if문부터 정리해보겠다. ㄴ^.^ㄱ 아잉 씬나 [if문] 여기, 깅이 서 있다. 깅의 키는 현재 80

dubleging.tistory.com

 

이번엔 이름 그대로 시킨 일을 반복하는 반복문(loof statement)을 다룰 차례이다. 설정한 조건이나 그 값에 따라 블록 안의 구문들을 실행하는데, 다음 편에 소개할 배열과 함께 자주 사용된다. 만약 다음과 같이 반복되는 문자를 표시해야한다고 해보자.

깅이 나무를 캔 횟수 : 0
깅이 나무를 캔 횟수 : 1
깅이 나무를 캔 횟수 : 2
깅이 나무를 캔 횟수 : 3
깅이 나무를 캔 횟수 : 4

숫자 외에 '깅이 나무를 캔 횟수 : '는 반복이 된다. 이럴 때 반복문을 사용하면 편리하다.

 

 

[for문]

for문을 사용한다면 다음과 같이 표현할 수 있다.

        for (int i = 0; i < 5; i++)
        {
            lb1.Text += "깅이 나무를 캔 횟수 : " + i + "\n";
        }

int i = 0; 으로 변수를 초기화 하고 i < 5; 으로 어디까지 반복할 것인지 쓰고, i++로 i에 변화를 준다. 변화를 주는 이유는 변화를 주지 않으면 i는 계속 0이기 때문에 구문을 무한 반복하기 때문이다. 반복문에서 조심해야하는게 바로 무한 반복인데, 이렇게 간단한 코드를 쓸 때는 그럴 일이 없겠지만, 점점 복잡한 코드를 쓰다보면 간혹 무한 반복 때문에 프로그램이 실행되지 않는 경우가 생긴다.

 

전체 코드
실행결과

 

 

[while문]

while문을 사용하면 다음과 같이 표현할 수 있다.

        int i = 0;

        while (i < 5)
        {
            lb1.Text += "깅이 나무를 캔 횟수 : " + i + "\n";
            i++;
        }

while문 밖에 변수 i를 초기화한 뒤, if문 처럼 그 안에 조건을 넣는다. for문에서 변화를 위한 식인 i++가 중요한 것처럼 while문도 마지막 i++; 가 중요하다. 이렇게 i를 1씩 증가시켜주지 않으면 무한 반복이 될 테니까 말이다.

 

실행결과는 역시 같다.

※반복하는 횟수만큼 문자를 표시할 때 대입(=)이 아닌 덧셈 대입(+=) 사용!

내가 자꾸 까먹는 것이 있다. 바로 덧셈 대입을 사용해야한다는 것인데, 만일 덧셈 대입이 아닌 대입을 사용하면 아래처럼 된다.

대입만 사용하면 lb1.Text 의 내용이 계속 덮어써져서 마지막 한 줄만 나온다. 덧셈 대입으로 내용을 추가 시켜줘야한다는 것, 잊지 말자!

 

-do ~ while문

조건이 맞지 않아도 한 번은 실행 한 뒤, 조건이 맞으면 반복하게끔 할 수도 있다.

        int i = 0;

	do
        {
            lb1.Text = "깅이 나무를 캔 횟수 : " + i + "\n";
            i++;
        } while (i > 5);

반복 실행의 조건은 i가 5를 초과해야 한다. 하지만 i는 0이다. 원래의 while문이라면 아무것도 표시되지 않겠지만 이렇게 do ~ while문을 쓰면 한 번은 구문을 실행한다.

i가 1 증가하는 식을 넣었지만 그래봤자 1이기 때문에 반복되지 않는다. 만일 한 번 실행할 때 i가 5를 초과하면 무한 반복이 될 것이다. 5보다 큰 수는 무한대로 있으니 말이다. 참고로 무한 반복이 되는 경우 친절한 비쥬얼 스튜디오 조차 빨간 줄로 알려주지 않으니 잘~ 생각해서 써야한다.

 

 

[break문과 continue문]

Main Quest 2-1. 나무 좀 그만 캐자...!
방랑자의 말에 따라 동쪽으로 향하던 깅. 반나절만에 깅덤에 도착했지만 성문 앞에서 경비병들에게 막히고 말았다. 나무 10개를 가져오면 들여보내준다는데... 왜 자꾸 나무야?!! 이젠 체력도 얼마 남지 않았는데!

 

깅이 나무를 캔 횟수를 10까지 반복 표시하되 체력이 0이 되면 체력이 바닥났다고 한 뒤 중단시키려 한다. if문과 break문으로 이를 표현해보자.

        int i = 0;
        int hp = 5; //깅의 남은 체력

        while (i <= 10)
        {
            lb1.Text += "깅이 나무를 캔 횟수 : " + i + "\n";
            i++;
            hp--; //한 번 나무를 캘 때마다 체력이 1씩 감소

            if (hp == 0)
            {
                lb1.Text += "체력이 바닥났습니다!";
                break;
            }
        }

변수 hp로 남은 체력을 설정하고 나무를 캘 때마다 hp 1씩 감소(hp--), if문으로 hp가 0일 때 체력이 바닥났다고 한 뒤 break를 썼다.

어.. 잠깐?

체력이 5 남았고 한 번 캘 때마다 1씩 줄어든다면 5번은 캐고 체력이 바닥나야하는데... 0부터 시작해서 4번 캐고 바닥났다. i가 1이 될 때부터 hp를 감소시키던가, 횟수를 1부터 세던가 하면 되겠지만 귀찮으니 넘어가자.

 

 

 

Main Quest 2-2. 행운의 여신은 나의 편!
겨우 체력을 회복하고 나무 10개를 가져다준 깅은 드디어 깅덤 왕국에 입성했다. 본격적으로 사깅꾼을 찾기 전 쉬고 싶었던 깅은 여관으로 갔다. 그런데 웬 이벤트를 하고 있네? 제비뽑기를 해서 당첨이 나오면 하루 숙박비가 무료?! 주어진 기회는 5번. 2번 당첨을 뽑으면 이틀, 5번 모두 당첨이면 5일 숙박비가 무료다~!!! 당첨을 뽑자!

 

1~5회차 결과 중 나머지는 꽝, 하나는 당첨으로 표시하려고 한다. 뽑기는 랜덤을 사용하는게 정석이지만 그건 나중에 사용하고, 일단 임의로 3번째 결과만 당첨으로 표시할 것이다. continue를 사용해 표현해보자.

        int i = 0; //뽑기 회차

        while (i < 5)
        {
            i++;
            lb1.Text += i + "회차 뽑기 결과 : ";

            if (i == 3)
            {
                lb1.Text += "당첨!\n";
                continue; //3회차 때 밑에 꽝!을 건너뜀.
            }

            lb1.Text += "꽝!\n";
        }

실행결과

먼저 반복이 될 문구인 n회차 뽑기 결과 : 를 써준다. lb1.Text 위에 i++를 넣은 것은, 반복문의 시작부터 1로 설정하기 위해서이다. lb1.Text보다 밑에 써두면 0회차부터 표시된다.

 

그렇다면 i를 초기화 할 때 0이 아닌 1로 해두고 i++를 Text 밑에 두어도 되지 않을까? 싶어서 해보니...

3회차가 아닌 2회차에서 당첨이 된다. 그 이유는 1회차 뽑기 결과 : 가 표시된 뒤 증가를 해서 2가 되는데, 다음 반복에서 2회차 뽑기 결과 : 가 표시된 뒤 또 증가해서 3이 되기 때문이다.

 

그렇다면 i++를 if문 밑에 두면 어떻게 될까?

무한 반복이 된다. continue를 빼면 (당연히) 무한반복이 되지 않지만, 3회차에 당첨과 꽝이 둘 다 표시된다. 왜 무한반복 되는 건지는 아무리 생각해도 모르겠어서 찾아봤다.

 

출처글 - https://blog.naver.com/kijun/221977303159

 

C# break와 continue

break 우리는 이미 break 명령어를 사용해 보았다. switch 문을 공부할 때 break가 등장했었는데, break 명...

blog.naver.com

 

아.. 아....! 아!!!!!!!

 

i가 3이 되면 반복하게 되는 구간. i++가 없어진다.

그렇다...!

i가 3이 되었을 때 건너뛰니 밑에 있는 i++도 건너뛰고 i가 증가하지 않으니 영원히 3에 머무르게 된 것이였다...!!

 

알고나서 보면 참 당연하고 간단한 건데... 내 의도만 집중적으로 생각하고 코드를 너무 추상적으로 받아들여서 이 부분을 놓친 것 같다. 또 i가 3이 될 때부터가 아니라 처음부터 문제인 줄 알았다.ㅠㅠ

 

내가 너무 바보같은 건가 싶기도 하지만, 그렇다고 몰랐다는 사실을 바꿀 순 없고 결국 알아냈다는게 중요한 것 같다! ^.^ ! 주눅들지 말자~ 알았음 됐지~ 알아낼 때까지 포기만 안하면 되지~

 

 

+for문과 while문의 차이..? 랄까 어느 상황에 적합할지는... 아직 명확하게 모르겠다. 하다보면 알게 될 것 같다.

 

 

요약


1.for문 형식 예: for(int i = 0; i < 5; i++){ ... } / 5회 반복. i는 0~4 출력.

2.while문 형식 예: int i = 0; while(i < 5) { ... i++; } / 5회 반복. i++; 위치에 따라 출력 다름.

3.do ~ while문 : 한 번은 무조건 실행. 조건이 맞으면 반복.

4.break는 반복중단.

5.continue는 건너뛰고 다음 반복으로.


 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함