/* if 조건문 — 컴파일은 되는데 결과가 틀리는 자리들
   컴파일:  gcc c-if.c -o cif -Wall                      */

#include <stdio.h>

int main(void)
{
    int 점수 = 0;
    printf("점수를 입력하세요: ");
    if (scanf("%d", &점수) != 1) {
        printf("숫자를 넣어야 합니다.\n");
        return 1;                 /* 0 이 아닌 값 = 문제가 있었다 */
    }

    char 학점;
    if (점수 >= 90) {
        학점 = 'A';
    } else if (점수 >= 80) {      /* 위가 거짓일 때만 봅니다 */
        학점 = 'B';
    } else if (점수 >= 70) {
        학점 = 'C';
    } else {
        학점 = 'F';
    }
    printf("학점: %c\n", 학점);

    /* 0 은 거짓, 나머지는 전부 참 */
    int 개수 = 0;
    if (개수) {
        printf("뭔가 있습니다\n");
    } else {
        printf("개수가 0 입니다\n");     /* 이쪽 */
    }

    /* && 그리고, || 또는, ! 아니다 */
    int 나이 = 21;
    int 재학중 = 1;
    if (나이 >= 20 && 재학중) {
        printf("성인 재학생입니다.\n");
    }

    /* ── 함정 1: 중괄호를 생략하면 첫 줄만 딸려갑니다 ── */
    if (점수 >= 60)
        printf("합격입니다.\n");
    printf("<- 이 줄은 점수와 상관없이 항상 나옵니다\n");

    /* ── 함정 2: 조건 뒤 세미콜론 — 조건문이 그 자리에서 끝납니다 ──
    if (점수 >= 60);
    {
        printf("이 블록은 조건과 무관하게 늘 실행됩니다\n");
    }
    */

    /* ── 함정 3: = 와 == ── ( -Wall 을 켜면 경고가 나옵니다 )
    if (학점 = 'A') {              // 학점에 'A' 를 넣고 항상 참
        printf("절대 이렇게 쓰지 마세요\n");
    }
    */

    /* switch — break 를 빼먹으면 아래로 줄줄이 흘러내립니다 */
    switch (학점) {
        case 'A':
        case 'B':
            printf("잘했습니다.\n");
            break;
        case 'C':
            printf("보통입니다.\n");
            break;
        default:
            printf("재수강 대상입니다.\n");
            break;
    }

    return 0;
}
