흐름 제어 · 05
조건문
조건에 따라 다른 일을 해요: if · else if · else, 그리고 switch.
조건문은 "만약 ~라면"을 코드로 쓴 거예요.
위에서부터 조건을 하나씩 보고, 처음으로 참인 갈래 하나만 실행해요.
아래 예제는 점수로 학점을 매기고 짝수인지도 알려 줘요.
score = int(input())if score >= 90: print("A")elif score >= 80: print("B")elif score >= 70: print("C")else: print("F")print("even" if score % 2 == 0 else "odd")const score = Number(require("fs").readFileSync(0, "utf8"));if (score >= 90) { console.log("A");} else if (score >= 80) { console.log("B");} else if (score >= 70) { console.log("C");} else { console.log("F");}console.log(score % 2 === 0 ? "even" : "odd");import { readFileSync } from "node:fs";const score: number = Number(readFileSync(0, "utf8"));if (score >= 90) { console.log("A");} else if (score >= 80) { console.log("B");} else if (score >= 70) { console.log("C");} else { console.log("F");}console.log(score % 2 === 0 ? "even" : "odd");import java.util.Scanner; public class Main { public static void main(String[] args) { int score = new Scanner(System.in).nextInt(); if (score >= 90) { System.out.println("A"); } else if (score >= 80) { System.out.println("B"); } else if (score >= 70) { System.out.println("C"); } else { System.out.println("F"); } System.out.println(score % 2 == 0 ? "even" : "odd"); }}using System; class Program{ static void Main() { int score = int.Parse(Console.ReadLine()); if (score >= 90) Console.WriteLine("A"); else if (score >= 80) Console.WriteLine("B"); else if (score >= 70) Console.WriteLine("C"); else Console.WriteLine("F"); Console.WriteLine(score % 2 == 0 ? "even" : "odd"); }}#include <iostream> int main() { int score; std::cin >> score; if (score >= 90) { std::cout << "A\n"; } else if (score >= 80) { std::cout << "B\n"; } else if (score >= 70) { std::cout << "C\n"; } else { std::cout << "F\n"; } std::cout << (score % 2 == 0 ? "even" : "odd") << '\n';}#include <stdio.h> int main(void) { int score; scanf("%d", &score); if (score >= 90) { puts("A"); } else if (score >= 80) { puts("B"); } else if (score >= 70) { puts("C"); } else { puts("F"); } puts(score % 2 == 0 ? "even" : "odd"); return 0;}score = 콘솔.줄읽기().수로변환();만약 (score >= 90){ 콘솔.쓰기("A");}아니면 만약 (score >= 80){ 콘솔.쓰기("B");}아니면 만약 (score >= 70){ 콘솔.쓰기("C");}아니면{ 콘솔.쓰기("F");}콘솔.쓰기(score % 2 == 0 ? "even" : "odd");75
C odd
핵심
- 조건은 위에서부터 봐요.
그래서 큰 기준부터 써야 해요.score >= 70을 먼저 쓰면 95점도 C가 돼요. - 모두 거짓이면
else갈래를 실행해요.else는 없어도 돼요. - 조건을 잇는 논리 연산자: 그리고
&&, 또는||, 아니다!.
Python은and,or,not이에요.
앞에서 답이 정해지면 뒤는 계산하지 않아요(x != 0 && 10 / x > 1은 안전해요). - 값 하나를 여러 경우와 견줄 때는 switch가 더 읽기 쉬워요.
언어마다 "다음 경우로 이어 내려가는지"가 달라요. - 짧은 둘 중 하나는 삼항 연산자로:
조건 ? 참일 때 : 거짓일 때(Python은A if 조건 else B).
언어별로 쓰는 법
| Python | if 조건: / elif 조건: / else: — 괄호 대신 :와 들여쓰기.switch는 3.10부터 match x: + case 1 | 2: + case _: |
|---|---|
| JavaScript | if (조건) { } else if (조건) { } else { } — switch는 case마다 break가 없으면 다음 case로 이어져요.값은 ===로 비교 |
| TypeScript | JavaScript와 같아요. 타입이 다른 값끼리 비교하면 컴파일할 때 알려 줘요 |
| Java | if (조건) { } else if (조건) { } else { } — switch는 break 필요.Java 14부터 case 1, 2 -> …는 이어지지 않아요 |
| C# | if (조건) { } else if (조건) { } else { } — switch는 내용 있는 case마다 break(또는 return)가 꼭 있어야 해요(빠뜨리면 컴파일 오류) |
| C++ | if (조건) { } else if (조건) { } else { } — switch는 정수(문자 포함)만, break가 없으면 다음 case로 이어져요 |
| C | C++와 같아요. 참·거짓은 0과 0 아닌 수예요 |
| Craykon | 만약 (조건) { } 아니면 만약 (조건) { } 아니면 { } — 선택 (x) { 경우 1, 2: … 그밖에: … }는 맞는 경우 하나만 실행하고 이어지지 않아요 |
자주 하는 실수
switch에서 break를 빠뜨렸어요C · C++ · Java · JavaScript
switch (n) {
case 1: puts("하나");
case 2: puts("둘");
}→ n이 1이면 "하나"와 "둘"이 모두 나와요
case마다 break;.
C#은 컴파일 오류로, 크레이콘 선택은 처음부터 이어지지 않게 막아요.
== 대신 =를 썼어요C · C++ · JavaScript · TypeScript
if (x = 5) {
printf("다섯");
}→ x에 5가 들어가고 조건은 늘 참이에요
비교는 ==.
Java·C#·Python·크레이콘은 이 실수를 오류로 알려 줘요.
1 < x < 10처럼 이어 썼어요JavaScript · C · C++ · Craykon
let x = 50;
console.log(1 < x < 10);→ true — (1 < x)가 먼저 true가 되고, true < 10이 참
1 < x && x < 10으로 나눠 써요.
Python에서만 수학처럼 이어 쓸 수 있어요(TypeScript·Java·C#은 컴파일 오류).
언어마다 다른 점
같은지 비교할 때 JavaScript·TypeScript는
크레이콘의
같은지 비교할 때 JavaScript·TypeScript는
===를 써요.==는 타입을 바꿔 가며 비교해서 "1" == 1도 true, "" == 0도 true예요.크레이콘의
==는 ===처럼 엄격해서 "1" == 1이 거짓이에요.