프로그램의 흐름을 제어하기 위해 사용되는 구문들.
프로그래밍에서 코드의 실행 순서를 결정하고, 특정 조건에 따라 다른 작업을 수행하도록 하는 데 필요합니다. 제어문에는 주로 조건문(Conditional Statements)과 반복문(Loop Statements)이 포함 됨.
프로그램에서 특정 조건을 기준으로 실행할 코드 블록을 결정한다.
조건에 따라 다른 경로를 선택하게 하여 프로그램의 유연성을 높여준다.
코드가 한 줄의 경우 중괄호 생략도 가능.
주어진 조건식이 참(True)일 때만 실행되는 코드
예시)
if (조건식) {
// 조건식이 참일 때 실행될 코드
}
int playerScore = 80;
if (playerScore >= 70) // 조건식이 참일 경우 실행함
{
Console.WriteLine("플레이어의 점수는 70점 이상입니다. 합격입니다!");
}
Console.WriteLine("프로그램이 종료됩니다."); // if가 아니면 출력
if 문의 조건식이 거짓(False)일 때 실행될 코드.
else 문은 if 문과 함께 사용되며, else 자체에는 별도의 조건을 붙이지 않는다.
예시)
if (조건식) {
// 조건식이 참일 때 실행될 코드
} else {
// 조건식이 거짓일 때 실행될 코드
}
int itemCount = 5;
string itemName = "HP 포션";
if (itemCount > 0)
{
Console.WriteLine($"보유한 {itemName}의 수량: {itemCount}");
}
else // 조건식이 거짓일 경우 실행
{
Console.WriteLine($"보유한 {itemName}이 없습니다.");
}
만약 itemCount = 0 이 된다면
if에서 itemCount > 0 식은 0>0, 거짓 flase가 되기 때문에
if는 패스하고 else로 넘어가는 구조.
여러 조건 중에서 하나를 선택해야 할 때 사용. if 다음에 여러 개의 else if 블록을 추가하여 다양한 조건을 체크
if (조건식1) {
// 조건식1이 참일 때 실행될 코드
} else if (조건식2) {
// 조건식1은 거짓이고 조건식2가 참일 때 실행될 코드
} else {
// 모든 조건식이 거짓일 때 실행될 코드
}
if (조건식1)**```
텍스트
```**
{
// 조건식1이 참일 경우 실행할 코드
}
else if (조건식2)
{
// 조건식2가 참일 경우 실행할 코드
}
else
{
// 모든 조건식이 거짓일 경우 실행할 코드
}
예시3)
int playerScore = 100;
string playerRank = "";
if (playerScore >= 90)
{
playerRank = "Diamond";
}
else if (playerScore >= 80)
{
playerRank = "Platinum";
}
else if (playerScore >= 70)
{
playerRank = "Gold";
}
else if (playerScore >= 60)
{
playerRank = "Silver";
}
else
{
playerRank = "Bronze";
}
Console.WriteLine("플레이어의 등급은 " + playerRank + "입니다.");
하나의 조건문 안에 또 다른 조건문이 포함된 형태의 조건문.
int itemLevel = 3; // 아이템 레벨
string itemType = "Weapon"; // 아이템 종류
if (itemType == "Weapon")
{
if (itemLevel == 1)
{
// 레벨 1 무기 효과
Console.WriteLine("공격력이 10 증가했습니다.");
}
else if (itemLevel == 2)
{
// 레벨 2 무기 효과
Console.WriteLine("공격력이 20 증가했습니다.");
}
else
{
// 그 외 무기 레벨
Console.WriteLine("잘못된 아이템 레벨입니다.");
}
}
else if (itemType == "Armor")
{
if (itemLevel == 1)
{
// 레벨 1 방어구 효과
Console.WriteLine("방어력이 10 증가했습니다.");
}
else if (itemLevel == 2)
{
// 레벨 2 방어구 효과
Console.WriteLine("방어력이 20 증가했습니다.");
}
else
{
// 그 외 방어구 레벨
Console.WriteLine("잘못된 아이템 레벨입니다.");
}
}
else
{
// 그 외 아이템 종류
Console.WriteLine("잘못된 아이템 종류입니다.");
}
변수나 식의 값에 따라 여러 경우의 코드를 실행할 수 있는 조건문이다.
case 레이블을 사용해 가능한 각 값을 위한 코드 블록을 정의한다.
switch (변수나 식)
{
case 값1:
// 값1이 나온 경우 실행되는 코드
break;
case 값2:
// 값2가 나온 경우 실행되는 코드
break;
// (case 생략)...
default:
// 모든 case문에 해당하지 않는 경우 실행되는 코드
break;
}
switch에 특정한 변수나 식을 주게 되어 특정 case에 진입하고
break; 까지 실행하고 switch 구문을 벗어나 다음 코드 진행
예시)
Console.WriteLine("게임을 시작합니다.");
Console.WriteLine("1: 전사 / 2: 마법사 / 3: 궁수");
Console.Write("직업을 선택하세요: ");
string job = Console.ReadLine();
switch (job)
{
case "1": // job이 string 이기 때문에 " " 로 표현
Console.WriteLine("전사를 선택하셨습니다.");
break;
case "2":
Console.WriteLine("마법사를 선택하셨습니다.");
break;
case "3":
Console.WriteLine("궁수를 선택하셨습니다.");
break;
default:
Console.WriteLine("올바른 값을 입력해주세요.");
break;
}
Console.WriteLine("게임을 종료합니다.");
job은 문자열(string) 이기 때문에 case 안에 숫자를 " " 로 감싸줘야 함
반복문은 주어진 조건에 따라 코드 블록을 여러 번 실행한다. 코드를 반복해서 처리할 때 유용하며, 데이터의 모든 요소를 처리하거나 반복적인 작업을 할 때 쓴다.
if 문의 간단한 형태로, 조건식의 결과에 따라 두 개의 값 중 하나를 선택할 수 있게 해주는 연산자.
삼항 연산자를 사용하면 if-else 구문을 좀 더 짧고 간결하게 표현할 수 있어서 코드를 간단하게 만들고 싶을 때 유용하며, 주로 간단한 조건에 따른 값 할당에 많이 쓰인다.
예를 들어, 어떤 숫자가 짝수인지 홀수인지에 따라 문자열을 다르게 할당하고 싶을 때 다음과 같이 삼항 연산자를 사용할 수 있다.
(조건식) ? 참일 때의 값 : 거짓일 때의 값
예시1) 삼항 연산자 사용
int number = 10;
string result = (number % 2 == 0) ? "짝수" : "홀수";
Console.WriteLine(result);
예시2) if else 문으로 바꾸면
int number = 10;
string result;
if (number % 2 == 0) {
result = "짝수";
} else {
result = "홀수";
}
Console.WriteLine(result);
예시3)
int currentExp = 1200;
int requiredExp = 2000;
# 삼항 연산자
string result = (currentExp >= requiredExp) ? "레벨업 가능" : "레벨업 불가능";
Console.WriteLine(result);
# if else 문
if (currentExp >= requiredExp)
{
Console.WriteLine("레벨업 가능");
}
else
{
Console.WriteLine("레벨업 불가능");
}
삼항 연산자 = if else 문과 같음
삼항 연산자는 코드의 가독성을 해칠 수도 있으니 복잡한 조건이나 여러 조건을 연결할 때는 if-else 구문을 사용하는 게 더 나을 수도 있다.
하지만 간단한 조건에 대해선 삼항 연산자가 매우 편리하게 쓰일 수 있다.
1) 홀/짝 구분
//1) 홀짝
Console.WriteLine("번호를 입력: ");
int number = int.Parse(Console.ReadLine());
// 나머지 연산
if (number % 2 == 0)
{
Console.WriteLine("짝수.");
}
else
{
Console.WriteLine("홀수.");
}
2) 등급 출력
switch문 활용
static void Main(string[] args)
{
//등급 출력
int score = 100;
string rank = "";
switch(score / 10) // 10을 나눠서 10단위로 case에 활용
{
case 10: // 이게 없으면 100점인 경우 default로 가버림, case 10에서 9로 진행.
case 9:
rank = "다이아몬드";
break;
case 8:
rank = "플래티넘";
break;
case 7:
rank = "골드";
break;
case 6:
rank = "실버";
break;
default:
rank = "브론즈";
break;
}
Console.WriteLine(rank);
}
3) 로그인 프로그램
// 로그인 프로그램
string id = "id";
string password = "pw";
Console.Write("아이디를 입력하세요: ");
string inputId = Console.ReadLine();
Console.Write("비밀번호를 입력하세요: ");
string inputPassword = Console.ReadLine();
if (id == inputId && password == inputPassword)
{
Console.WriteLine("로그인 성공");
}
else
{
Console.WriteLine("로그인 실패");
}
4) 알파벳 판별 프로그램
//알파벳 판별
Console.Write("문자를 입력: ");
char input = Console.ReadLine()[0]; // [ ] 인덱싱, 0은 문자열에서 제일 앞에 것을 가져옴
// 소문자 a ~ z, 대문자 A~Z 범위에 해당 되면 알파벳
if ( (input >= 'a' && input <= 'z') || input >= 'A' && input <= 'Z')
{
Console.WriteLine("알파벳입니다.");
}
else
{
Console.WriteLine("알파벳이 아닙니다.");
}
일련의 명령문을 반복해서 실행하는 제어문
초기식, 조건식, 증감식으로 구성
일정 횟수를 알고 있거나 특정 범위의 숫자를 순회할 때 사용된다. 초기식
에서 시작해 조건식
이 거짓이 될 때까지 반복
되며, 각 반복 후에 증감식
이 실행된다. 주로 배열
이나 리스트
와 같은 컬렉션의 정해진 범위를 순회
할 때 매우 효과적이다.
for (초기식; 조건식; 증감식)
{
// 조건식이 참인 경우 실행되는 코드
}
ex) for문 예시
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
초기를 만족 시키고, 조건을 검사해서, WriteLine 출력 후 다시 증감식으로 진행, 조건 확인 후 맞으면 i ++ 진행
조건식이 참인 동안 코드 블록을 계속 실행
한다.
주로 얼마나 많은 반복이 필요한지 미리 알 수 없을 때 사용된다.
예를 들어, 사용자 입력이나 파일의 끝에 도달할 때까지 데이터를 읽는 경우에 적합하다.
while (조건식)
{
// 조건식이 참인 경우 실행되는 코드
}
int i = 0; //초기
while (i < 10) //조건
{
Console.WriteLine(i);
i++; // 증감
}
결국 for 문과 비슷
int count = 0;
while (count < 10)
{
Console.WriteLine("적을 처치했습니다! 남은 적 수: " + (10 - count - 1));
count++;
}
Console.WriteLine("축하합니다! 게임에서 승리하셨습니다!");
for문 예시)
int sum = 0;
for (int i = 1; i <= 5; i++)
{
sum += i;
}
Console.WriteLine("1부터 5까지의 합은 " + sum + "입니다.");
while문 예시)
int sum = 0;
int i = 1;
while (i <= 5)
{
sum += i;
i++;
}
Console.WriteLine("1부터 5까지의 합은 " + sum + "입니다.");
for
: 반복 횟수를 직관적으로 알 수 있고, 반복 조건을 한 눈에 확인할 수 있어 가독성이 좋다.
while
: 반복 조건에 따라 조건문의 실행 횟수가 유동적이며, 이에 따라 코드가 더 간결할 수 있다.
어떤 반복문을 사용할지는 코드의 흐름에 따라 상황에 맞게 선택.
적어도 한 번은 반복문의 코드를 실행한 후 조건을 검사한다.
while
문과 유사하지만, 반복문의 코드가 최소 한 번
은 실행됨을 보장한다. 사용자 입력을 받고 검증해야 할 때 유용하다.
do
{
// 조건식이 참인 경우 실행되는 코드
}
while (조건식);
int sum = 0;
int num;
do
{
Console.Write("숫자를 입력하세요 (0 입력 시 종료): ");
num = int.Parse(Console.ReadLine());
sum += num;
} while (num != 0);
// 0이 아니면 다시 회귀
Console.WriteLine("합계: " + sum);
// 사용자가 유효한 숫자를 입력할 때까지 계속 요청
int number;
do {
Console.Write("0 이상의 숫자를 입력하세요: ");
number = Convert.ToInt32(Console.ReadLine());
} while (number < 0);
배열이나 컬렉션에 대한 반복문을 작성할 때 사용.
컬렉션의 시작부터 끝까지 각 요소에 대해 반복 실행하며, 주로 컬렉션의 모든 요소에 접근할 때 쓰인다.
foreach (자료형 변수 in 배열 또는 컬렉션)
{
// 배열 또는 컬렉션의 모든 요소에 대해 반복적으로 실행되는 코드
}
string[] inventory = { "검", "방패", "활", "화살", "물약" }; //string의 배열들, 순서대로 하나씩 대입 됨
foreach (string item in inventory)
{
Console.WriteLine(item);
}
foreach 루프의 반복에서, inventory 배열의 현재 요소를 참조하여
item이라는 변수에 순차적으로 할당
출력)
검
방패
활
화살
물약
반복문 안에 또 다른 반복문이 들어가는 구조로, 다차원 배열이나 리스트 같은 복잡한 데이터 구조를 처리할 때 사용된다. 각 요소에 대한 세밀한 제어가 필요할 때 흔히 볼 수 있다.
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 3; j++)
{
Console.WriteLine("i: {0}, j: {1}", i, j);
}
}
// 총 5x3 -> 15번 반복
// 2차원 배열의 각 요소를 출력
int[,] matrix = new int[3, 3];
for (int i = 0; i < matrix.GetLength(0); i++) {
for (int j = 0; j < matrix.GetLength(1); j++) {
Console.Write(matrix[i, j] + " ");
}
Console.WriteLine();
}
구구단 예시)
for (int i = 2; i <= 9; i++)//처음 조건 실행하고 밑으로
{
for (int j = 1; j <= 9; j++) // 9까지 실행하고 다시 위로
{
Console.WriteLine(i + " x " + j + " = " + (i * j));
}
}
break
는 현재의 반복문을 즉시 종료하고 반복문 블록 바깥으로 빠져나온다continue
는 현재 반복을 중지하고, 반복문의 다음 반복으로 즉시 넘어간다.break
는 루프를 완전히 끝내야 할 때,
continue
는 특정 조건을 만족할 때 해당 반복만 건너뛰고 싶을 때 사용된다.
for (int i = 1; i <= 10; i++)
{
if (i % 3 == 0) // 3의 배수 일 때
{
continue; // i가 3의 배수인 경우 다음 숫자로 넘어감
}
Console.WriteLine(i); // 3의 배수만 빼고 출력
if (i == 7) // i가 7이되면 끝내고 싶다는 뜻
{
break; // 7이 출력된 이후에는 반복문을 빠져나감
}
}
Continue : 조건에 맞는 회차를 건너 뛰고 다시 증감식으로.
Break : 구문 밖으로.
예제)
int sum = 0;
while (true)
{
Console.Write("숫자를 입력하세요: ");
int input = int.Parse(Console.ReadLine());
if (input == 0)
{
Console.WriteLine("프로그램을 종료합니다.");
break;
}
if (input < 0)
{
Console.WriteLine("음수는 무시합니다.");
continue;
}
sum += input;
Console.WriteLine("현재까지의 합: " + sum);
}
Console.WriteLine("합계: " + sum);
1) 가위바위보 만들기
//가위바위보
string[] choice = { "가위", "바위", "보" };
string playerChoice = "";
string computerChoice = choice[new Random().Next(0,3)]; // 0~2까지만 랜덤으로.
while (playerChoice != computerChoice)
{
Console.Write("가위, 바위, 보중 하나를 선택하세요 : ");
playerChoice = Console.ReadLine();
if (playerChoice == computerChoice)
{
Console.WriteLine("비겼습니다.");
}
else if (
(playerChoice == "가위" && computerChoice == "보") ||
(playerChoice == "바위" && computerChoice == "가위") ||
(playerChoice == "보" && computerChoice == "바위")
)
{
Console.WriteLine("플레이어 승리!");
}
else
{
Console.WriteLine("컴퓨터 승리!");
}
}
Random 클래스의 Next() 메서드를 사용
Random변수명 = new Random();
-> 랜덤 타입의 객체를 생성
next() : 임의의 정수를 반환하는 메서드 ( n>=0 )
2) 숫자 맞추기
int targetNumber = new Random().Next(1, 101);
int guess = 0;
int count = 0;
Console.WriteLine("1부터 100사이의 숫자를 맞춰라.");
while (guess != targetNumber)
{
Console.Write("추측한 숫자를 입력하세요");
guess = int.Parse(Console.ReadLine());
count++;
if (guess < targetNumber)
{
Console.WriteLine("좀 더 큰 숫자를 입력하세요.");
}
else if (guess > targetNumber)
{
Console.WriteLine("좀 작은 숫자를 입력하세요.");
}
else
{
Console.WriteLine("정답입니다!");
Console.WriteLine("시도한 횟수 : " + count);
}
}