사전캠프/걷기반

걷기반 Lv.2 이름 찾기!

서보훈 2024. 8. 19. 15:58

1. 이름 입력하기

이름을 입력하여 3글자 이상 10글자 이하의 이름을 입력할 수 있는 프로그램을 작성합니다.

  • 최초 메시지 출력 - “이름을 입력해주세요. (3~10글자)”
  • 이름이 3글자 미만, 10글자 초과라면 - “이름을 확인해주세요.”
  • 올바르게 입력했다면 - “안녕하세요! 제 이름은 xxx 입니다.”
  • 문자열의 .Length 기능을 이용하면 현재 문자열이 몇글자인지 알 수 있습니다.
string myStr = "test";
int length = myStr.Length;

결과 : length - 4

 


2. 조건에 맞을때 까지 이름 입력

1번의 프로그램을 작성하면 3~10글자의 이름을 입력하지 않았을때 이름을 확인해주세요. 메시지 이후 프로그램이 종료됩니다.

이름을 올바르게 입력할때까지 실행되도록 적용해보세요.

  • 반복문과 bool 을 이용하여 만들 수 있습니다.

3. 반복시 기존 내용 지우기

2번의 프로그램을 작성하면 매번 새로운 텍스트가 생기게 됩니다.

Console.Clear(); 기능을 활용하면 기존에 Console 에 표시되던 메시지를 지울 수 있습니다.

 


 

문자열을 입력하고, 문자열의 길이가 3 ~ 10 사이일경우 와 그렇지 않을경우 출력을 발생시키는 코드를 작성하는 문제입니다.

 

해당 문제는 문자열이 배열의 일종임을 이용하는 문제로, 문자열 변수를 배열처럼 사용하여 문제를 해결하게 됩니다.

변수.Length 의경우, 배열의 길이를 int형으로 반환하는 기능으로, 만약 numberArray 라는 이름의 배열에 {1, 2, 3, 4, 5}가 저장되어있을 경우, 5의 값을 반환하게 됩니다.

{
    //배열 선언
    int[] numberArray = { 1, 2, 3, 4, 5 };
    //배열의 길이
    int arrayLength = numberArray.Length;
    //콘솔에 출력
    Console.WriteLine($"numberArray의 길이 : {arrayLength}");
}

해당 코드에서 배열을 string 변수로 변경하여 "abcd" 값을 저장한 후 실행하여도 작동하는것을 확인할 수 있습니다.

{
    //문자열 선언
    string stringArray = "abcd";
    //문자열의 길이
    int arrayLength = stringArray.Length;
    //콘솔에 출력
    Console.WriteLine($"문자열의 길이 : {arrayLength}");
}

이는 string 변수가 문자 하나의 형식인 char의 배열으로 볼 수 있기 때문입니다.

※ 단, string 형식과 실제 배열에 사용되는 .Length 의 정의는 다릅니다.

 

이를 사용하여 1번 문제를 풀어보도록 하겠습니다.

{
    //질문 출력, 입력받기
    Console.WriteLine("이름을 입력해주세요. (3 ~ 10 글자)");
    string input = Console.ReadLine();

    //문자열이 3 ~ 10 글자일경우
    if (input.Length >= 3 && input.Length <= 10)
    {
        Console.WriteLine($"안녕하세요! 제 이름은 {input} 입니다.");
    }
    //3 ~ 10 줄이 아닐경우
    else
    {
        Console.WriteLine("이름을 확인해주세요.");
    }
}

기본적으로 ReadLine 혹은 Read 를 사용해 입력을 받으면 string 값으로 저장하게 됩니다.

지금은 입력값의 길이를 알아내는것이 목적이기 때문에 TryParse를 사용하여 해당 입력값을 변환할 필요는 없습니다.

 

값을 입력받은 뒤, if문의 조건에 input.Length를 사용하여 입력하여 저장된 string값의 길이를 판단합니다.

if문에 조건에 따라, 출력이 달라지게 됩니다.

 

1번 문제는 해결되었습니다.

2번 문제에서는, 이름이 올바르게 입력될때 까지 반복하도록 만들어야 합니다.

 

이러한 경우, while(true) 의 값이 들어올경우, 무한루프가 되어서 반복문이 계속실행되는점을 사용하게 됩니다.

bool 변수를 통해, 원하는 값이 들어올 경우 반복문의 조건문이 false가 되게 만들어 반복을 종료하도록 만들어주면 됩니다.

 

2번 문제의 코드를 작성하도록 하겠습니다.

{
    //정확한 값이 입력되었는지 판단하기 위한 bool 변수
    bool isSuccess = false;

    //정확한 값이 입력되지 않으면 반복
    while(!isSuccess)
    {
        //질문 출력, 입력받기
        Console.WriteLine("이름을 입력해주세요. (3 ~ 10 글자)");
        string input = Console.ReadLine();

        //문자열이 3 ~ 10 글자일경우
        if (input.Length >= 3 && input.Length <= 10)
        {
            Console.WriteLine($"안녕하세요! 제 이름은 {input} 입니다.");
            //입력 성공, bool의 값 바꾸기
            isSuccess = true;
        }
        //3 ~ 10 줄이 아닐경우
        else
        {
            Console.WriteLine("이름을 확인해주세요.");
        }
    }
}

반복문을 제어할 isSuccess 라는 이름의 bool 변수를 선언해주고, 이름에 맞도록 성공하면 true, 실패시 false값을 가지도록 해주겠습니다.

시작할때는 인증에 실패한것과 마찬가지기 때문에 false값으로 초기화 해줍니다.

 

while(true)일 경우, 반복문을 실행하는데 isSuccess 변수가 false일때 작동이 중지되면 실패했는데 반복문이 종료되는것 처럼 보일 수 있습니다.

따라서 while의 조건문에 not 연산자 ! 를 붙여서 true를 false로 바꾸어줍니다.

 

또한 입력과 입력을 저장하는 string 변수를 반복문의 내부에 넣어서 반복될때마다 다시 입력하고, 입력을 받아주는 변수의 값을 초기화 해줍니다.

 

정확한 값을 입력하면 반복문을 종료해주어야 하기 때문에, 결과물을 출력한 뒤, isSuccess 변수를 true로 만들어주어 다음 반복을 시작할 때, !isSuccess 값이 false가 되어 반복을 종료하도록 만들어 줍니다.

 

이것으로 정확한 값을 입력할때까지 반복하여 입력을 유도하도록 프로그램 작성이 완료되었습니다.

 

이제 3번문제를 해결해야합니다.

 

3번 문제는 실패시 "이름을 확인해주세요." 만 남기고 이전에 입력을 시도했던 텍스트를 지워주어야 합니다.

문제에 적혀있다싶이 Console.Clear(); 를 사용하여 콘솔에 출력한 값을 모두 지울수 있지만, 이를 어디에서 사용해야할지가 중요합니다.

 

문제를 풀어보도록 하겠습니다.

{
    //정확한 값이 입력되었는지 판단하기 위한 bool 변수
    bool isSuccess = false;

    //정확한 값이 입력되지 않으면 반복
    while(!isSuccess)
    {
        //질문 출력, 입력받기
        Console.WriteLine("이름을 입력해주세요. (3 ~ 10 글자)");
        string input = Console.ReadLine();

        //문자열이 3 ~ 10 글자일경우
        if (input.Length >= 3 && input.Length <= 10)
        {
            Console.WriteLine($"안녕하세요! 제 이름은 {input} 입니다.");
            //입력 성공, bool의 값 바꾸기
            isSuccess = true;
        }
        //3 ~ 10 줄이 아닐경우
        else
        {
            //텍스트 지우기
            Console.Clear();
            Console.WriteLine("이름을 확인해주세요.");
        }
    }
}

else문에서, "이름을 확인해주세요." 를 출력하기전 출력된 텍스트를 지워줍니다.

텍스트를 지우고 다음 텍스트를 출력하기 때문에 실제 출력에는 "이름을 확인해주세요." 만 남은 뒤, 다음 반복이 시작되어 "이름을 입력해주세요. (3 ~ 10 글자)" 가 출력되게 됩니다.

 

또한, 입력실패시에만 작동하기 때문에 입력에 성공하면 텍스트 지우기가 작동하지 않게됩니다.