/* for 반복문 — 세 칸의 뜻과 하나 차이 오류
   컴파일:  gcc c-for.c -o cfor -Wall                    */

#include <stdio.h>

int main(void)
{
    /* 시작 ; 조건 ; 증가   — 0 부터, < 로 끝내는 것이 관례입니다 */
    for (int i = 0; i < 5; i++) {
        printf("i = %d\n", i);        /* 0,1,2,3,4 — 정확히 다섯 번 */
    }

    /* 1 부터 n 까지 세고 싶으면 <= 를 씁니다 */
    int n = 5;
    int 합 = 0;
    for (int i = 1; i <= n; i++) {
        합 += i;
    }
    printf("1부터 %d까지 합: %d\n", n, 합);

    /* 구구단 — 이중 반복 */
    for (int 단 = 2; 단 <= 3; 단++) {
        for (int 곱 = 1; 곱 <= 9; 곱++) {
            printf("%d x %d = %2d\n", 단, 곱, 단 * 곱);
        }
        printf("----\n");
    }

    /* break 는 통째로 그만, continue 는 이번 회차만 건너뛰기 */
    for (int 수 = 1; 수 <= 10; 수++) {
        if (수 % 2 == 0) {
            continue;               /* 짝수는 건너뛴다 */
        }
        if (수 > 7) {
            break;                  /* 7 을 넘으면 아예 그만둔다 */
        }
        printf("홀수: %d\n", 수);   /* 1, 3, 5, 7 */
    }

    /* 거꾸로 세기 */
    for (int i = 3; i > 0; i--) {
        printf("%d... ", i);
    }
    printf("시작!\n");

    /* ── 하나 차이 오류 ──
       크기 5 인 배열에 i <= 5 로 돌면 배열[5] 를 건드립니다.
       C 는 막지 않습니다. 컴파일도 되고 실행도 되다가 엉뚱한 값이 나옵니다.  */
    int 점수[5] = {90, 85, 77, 68, 94};
    for (int i = 0; i < 5; i++) {          /* <= 5 로 쓰면 안 됩니다 */
        printf("점수[%d] = %d\n", i, 점수[i]);
    }

    /* 배열 크기를 직접 세지 말고 이렇게 구하면 실수가 줄어듭니다 */
    int 개수 = (int)(sizeof(점수) / sizeof(점수[0]));
    printf("원소 개수: %d\n", 개수);

    return 0;
}
