3. 반복

이규성·2023년 9월 27일
0

TIL

목록 보기
3/106

9/27 C# 반복에 대해 공부

반복문

for

식 자체에 초기화, 조건, 변화가 다 들어있어서 가장 기본적인 반복문

for(초기화;조건;변화)
{
	실행 내용
}

ex) 1부터 10까지 세어보자

for(int i = 1; i <= 10; i++)
{
	Console.WriteLine(i);
}

while

조건만 체크하는 반복문이다. 초기화, 변화가 필요하다면 외부에 작성한다.

while(조건)
{
	실행 내용
}

ex) 1부터 10까지 세어보자

int i=1;

while(i <= 10)
{
	Console.WriteLine(i);
	i++;
}

do while

조건과 상관없이 한 번은 내용을 실행하는 반복문. 이후에는 while과 같이 반복한다.

do
{
	실행 내용
}

ex1) 1부터 10까지 세어보자

int i = 1;

do
{
	Console.WriteLine(i);
	i++;
}
while(i <= 10)

ex2) 같은 조건에서 i의 시작을 1에서 11로 바꿔보자

int i = 11;` // while 조건에 부합하지 않아서 반복은 하지 않지만 `do` 기 때문에 11이 출력 뒤 종료.
do
{
	Console.WriteLine(i);
	i++;
}
while(i <= 10)

연습 문제 중 배운 것

연습 문제에서 배워가는 것이 많다..

ex1) 숫자를 하나 입력 받아 그 데이터로 구구단 만들기

입력받은 데이터가 숫자가 아니라면 "숫자가 아닙니다." 출력

Console.WriteLine("출력하고 싶은 구구단 숫자를 입력해 주세요.");
string input=Console.ReadLine();

int num;
bool isInt=int.TryParse(input, out num);

if (isInt)
{
    for (int i = 2; i <= 9; i++)
    {
        `Console.WriteLine(num + " x " + i + " = " + num * i);
    }
}
else
{
    Console.WriteLine("숫자가 아닙니다.");
}


어제 사용했던 조건문에 오늘 배운 반복문을 둘 다 이용하여 생성하였다. 그리 어렵지 않았다.

ex2) 입력받은 숫자 데이터 만큼 피보나치 수열 구하기

  • 최초 메시지 출력 - "몇 개의 피보나치 수열을 출력하고 싶으신가요?"
  • 입력받은 데이터가 숫자가 아니라면 - "숫자가 아닙니다."
  • 숫자가 0 이하라면 - "양수를 입력해 주세요."
  • 숫자가 47 이상이라면 - "숫자가 너무 큽니다." // 47번째부터는 숫자가 너무 커져서 int의 표현 범위를 벗어남

문제만 보고 작성한 코드

피보나치 수열은 잘 실행 되었지만 >=47, <=0 이 작동하지 않았다. if 조건문에 대해 좀 더 개념적인 부분들을 공부해야 할 필요성을 느꼈다.

샘플 코드

원인을 분석해 보니 ifelse if는 많은 조건들 중에서 부합하는 하나의 조건만 실행이 되고 나머지는 실행되지 않는다. 그렇기 때문에 내가 작성한 코드는 피보나치 수열이 계속 조건이 맞았기 때문에 아래의 나머지 조건들은 실행되지 않았다.

ex3) 3글자 이상 10글자 이하의 이름을 입력할 수 있는 프로그램 작성하기

  • 최초 메시지 출력 - "이름을 입력해 주세요. (3~10글자)"
  • 이름이 3글자 미만 10글자 초과라면 - "이름을 확인해 주세요."
  • 올바르게 입력했다면 - "안녕하세요! 제 이름은 xxx 입니다."
    // 이 문제에서 새로운 기능인 .Length를 배웠다.
Console.WriteLine(" 이름을 입력해 주세요. (3~10글자) ");
string input=Console.ReadLine();

 if (input.Length >= 3 && input.Length <= 10)
 {
     `Console.WriteLine("안녕하세요! 제 이름은 " + input + " 입니다.");
 }
 else
 {
     Console.WriteLine("이름을 확인해 주세요.");
 }

처음에는 input.Lengthintbool을 이용하여 if에 적용하려고 했으니 조건문에는 사용할 수 없다는 에러가 났다. 원인을 알아보니 그냥 조건문에 input.Length를 바로 적용하면 되는 것이었다!

ex4) 조건에 맞을 때까지 이름 입력하기

위의 코드를 실행시키면 이름 입력에 실패했을 때 "이름을 입력해 주세요."가 출력되고 종료된다. 이것을 조건이 맞을 때까지 시도할 수 있게 만들기

bool inSuccess;

do
{
    Console.WriteLine(" 이름을 입력해 주세요. (3~10글자) ");
    string input = Console.ReadLine();

    if (input.Length >= 3 && input.Length <= 10)
    {
        Console.WriteLine("안녕하세요! 제 이름은 " + input + " 입니다.");
    }
    else
    {
        Console.WriteLine("이름을 확인해 주세요.");
    }

    inSuccess = input.Length >= 3 && input.Length <= 10;
}
while (!inSuccess);

이건 도저히 감도 오지 않아서 샘플 코드를 따라 적으며 이해하려 했다.
do while을 사용한 것은 맨처음에 "이름을 입력해 주세요" 문구를 출력하기 위함으로 보인다.
반복은 while 조건문에 bool 을 넣어 true라면 반복 false라면 중단임을 서칭으로 알게 되었다.
하지만 필요한 것은 이름을 정확히 입력한 뒤 프로그램이 종료되는 것인데 이 조건은 true라서 반복이 계속된다. 이 또한 서치로 알아보니 bool 데이터 앞에 !를 입력하면 true와 false가 서로 바뀌게 된다.
그래서 while (!inSuccess); 이런 형식으로 코드를 작성해야 한다.

ex5) 반복 시 기존 내용 지우기

 Console.WriteLine(" 이름을 입력해 주세요. (3~10글자) ");
 string input = Console.ReadLine();

 Console.Clear();

이렇게 string input = Console.ReadLine(); 아래에 Console.Clear();를 작성하면 된다.

Feedback

개인적으로 오늘 공부한 내용이 가장 어려웠다. 앞으로 배울 내용들이 조금 두렵긴 하지만 샘플 코드를 보지 않고 성공시켰을 때의 성취감이 달콤하다. 반복 숙달도 중요하겠지만 개념적인 부분들도 시간을 내어서 꼭 공부를 해야겠다.

0개의 댓글