1. 퀴즈를 내서 정답을 맞추는 프로그램 작성해주세요.
- Q. 대한민국의 수도는 어디인가요? 1.인천 2.평창 3.서울 4.부산
- 입력한 데이터가 숫자가 아니라면, “숫자가 아닙니다.”를 출력해주세요.
- 1~4에 해당하는 숫자가 아니라면, “1~4의 숫자를 입력해주세요.”를 출력해주세요.
- 1~4의 숫자 일 때
- 정답이라면 “정답입니다!”를 출력해주세요.
- 정답이 아니라면 “오답입니다!”를 출력해주세요.
4지선다형 문제를 내고, 입력을 받아 정답을 확인하는 프로그램을 작성해야합니다.
ReadLine() 을 사용하여 입력을 받기 때문에, 입력값이 정수인지 확인하기 위해 TryParse를 사용하며, if문을 사용하여 1 ~ 4 사이의 숫자인지를 판단, 그중 어떤 숫자를 입력했는지에 따라 답을 내주면 됩니다.
먼저, if문을 사용하여 코드를 작성해보도록 하겠습니다.
{
//질문 출력
Console.WriteLine("Q. 대한민국의 수도는 어디인가요?");
Console.WriteLine("1.인천 2.평창 3.서울 4.부산");
//정답 입력
string input = Console.ReadLine();
//정수형일경우, 여기서 받아줌
int inputNum;
//첫번째 if문, 정수형인가?
if(int.TryParse(input, out inputNum))
{
//정수형이면, 2번째 if문 1 ~ 4 사이인가?
if(inputNum>= 1 && inputNum <= 4)
{
//1 ~ 4 면, 3번째 if문, 정답인가?
if(inputNum == 3)
{
//정답
Console.WriteLine("정답입니다!");
}
else
{
//오답
Console.WriteLine("오답입니다!");
}
}
else
{
//1 ~ 4 사이가 아니면, 1 ~ 4로 입력해달라고 출력
Console.WriteLine("1 ~ 4 의 숫자를 입력해주세요.");
}
}
else
{
//정수형이 아니면, 숫자가 아님을 출력
Console.WriteLine("숫자가 아닙니다.");
}
}
지금까지 코드와다를게 없이, 입력받은 string 값을 TryParse를 통해 정수형인지 판단하고, 정수형일 경우 int 값을 받아줄 변수에 저장하여 저장된 변수를 if문을 사용해 정답을 판단하도록 만들었습니다.
지금까지와 다른점이 있다면, bool 변수를 선언하여, TryParse의 반환값을 받아주지 않고 if문에 직접 TryParse를 사용하여 변수를 거치지 않고 if문에서 바로 반환값을 사용하였습니다.
이런식으로 사용하여도 out을 통해 int값에 형변환이 된 정수형 값이 저장되어 사용할 수 있습니다.
그리고 if문을 3중으로 사용하여, 정수형 여부, 1 ~ 4 사이 여부, 정답여부를 판단하도록 코드를 만들어주었습니다.
그런데 if문이 다중으로 곂쳐있는 결과, 3개의 if문이 어디서 끝나는지를 확인하기가 쉽지 않아질수 있습니다.
이러한 문제에 대하여 이전 본격 프로그래밍 시작하기에서 if와 case를 언제 사용하는지 적은적이 있는데, 이번 문제와 같이 객관식 문제에서 case 문을 사용하면 코드를 더 알기 쉽다고 했었습니다.
switch - case를 사용하여 다시 해보도록 하겠습니다.
{
{
//질문 출력
Console.WriteLine("Q. 대한민국의 수도는 어디인가요?");
Console.WriteLine("1.인천 2.평창 3.서울 4.부산");
//정답 입력
string input = Console.ReadLine();
//정수형일경우, 여기서 받아줌
int inputNum;
//첫번째 if문, 정수형인가?
if (int.TryParse(input, out inputNum))
{
//정수형일경우 switch문 작동
switch(inputNum)
{
//입력값이 1일경우
case 1:
Console.WriteLine("오답입니다.");
break;
//입력값이 2인경우
case 2:
Console.WriteLine("오답입니다.");
break;
//입력값이 3인경우
case 3:
Console.WriteLine("정답입니다.");
break;
//입력값이 4인 경우
case 4:
Console.WriteLine("오답입니다.");
break;
//그 외의 입력이 들어온경우
default:
Console.WriteLine("1 ~ 4 의 숫자를 입력해주세요");
break;
}
}
else
{
//정수형이 아니면, 숫자가 아님을 출력
Console.WriteLine("숫자가 아닙니다.");
}
}
}
switch를 사용하여 코드를 작성하였습니다.
기본 작성법을 위하여 같은 답을 사용하지만, 각각 다른 case로 적어주었습니다.
이를 축약하여 1, 2, 4번 입력이 같은 값을 출력하게 할 경우 이러한 형태가 됩니다.
{
{
//질문 출력
Console.WriteLine("Q. 대한민국의 수도는 어디인가요?");
Console.WriteLine("1.인천 2.평창 3.서울 4.부산");
//정답 입력
string input = Console.ReadLine();
//정수형일경우, 여기서 받아줌
int inputNum;
//첫번째 if문, 정수형인가?
if (int.TryParse(input, out inputNum))
{
//정수형일경우 switch문 작동
switch(inputNum)
{
//입력값이 1, 2, 4일경우
case 1: case 2: case 4:
Console.WriteLine("오답입니다.");
break;
//입력값이 3인경우
case 3:
Console.WriteLine("정답입니다.");
break;
default:
Console.WriteLine("1 ~ 4 의 숫자를 입력해주세요");
break;
}
}
else
{
//정수형이 아니면, 숫자가 아님을 출력
Console.WriteLine("숫자가 아닙니다.");
}
}
}
switch문은 입력값을 받아, 해당 입력값과 같은 case가 있을경우 해당 case값을 반환합니다.
해당 코드에서는 switch에서 inputNum을 입력하여, inputNum과 같은 값을 가진 정수형 case가 있으면 해당 case를 작동하게 됩니다.
그리고 해당 case를 실행한 후, break문을 통해 switch문 자체를 빠져나가 다른 출력이 발생하지 않게 됩니다.
같은 case가 없을경우, default 문을 작동하게되며 default문이 없을경우 switch문이 종료되게 됩니다.
switch문은 입력에대한 출력을 하나하나 정해주어야하기 때문에, 만약 1~100 사이의 값을 처리해야할경우 if문을 사용하여 처리하는것이 더 효율적이게 됩니다.
적은수의 결과값을 처리하거나, 적은수의 각각 다른 결과값을 출력해야하는 경우 switch문을 유용하게 사용할 수 있습니다.
'사전캠프 > 걷기반' 카테고리의 다른 글
걷기반 Lv.2 이름 찾기! (0) | 2024.08.19 |
---|---|
걷기반 Lv.2 여행을 떠나요 (0) | 2024.08.19 |
걷기반 Lv.2 숫자...인가요? (0) | 2024.08.16 |
걷기반 Lv.2 본격 프로그래밍 시작해보기 (0) | 2024.08.16 |
걷기반 Lv.1 연산자 실습 (0) | 2024.08.13 |