C언어 간단한 프로그램 2

2025. 6. 21. 14:29·C/Task

 

 

 

 

 

 

 

 

 

 

 

 

 

🌟 프로그램 14,  난수 발생 함수를 사용하여 컴퓨터와 대전이 가능한 가위바위보 게임 만들기

더보기

💻 C언어를 사용해서 간단한 가위바위보 게임

💻 사용자는 반복적으로 게임을 진행할 수 있으며, 종료 시에는 승/패/무 결과까지 출력

 

🎮 기능 소개

  • 사용자로부터 가위(1), 바위(2), 보(3), 종료(0) 입력 받기
  • 컴퓨터는 랜덤하게 가위, 바위, 보 선택
  • 승/패/무 조건 비교 및 결과 출력
  • 사용자의 누적 승/패/무 전적 출력

 

📜 전체 코드

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 게임 결과 출력 함수
void count(int win, int lose, int draw);

// 사용자로부터 입력을 받는 함수
int user_input() {
    int user_choice;

    while (1) {
        // 사용자 입력 요청
        printf("\n>>> 가위(1), 바위(2), 보(3), 종료(0) 입력: ");
        printf(">> ");
        scanf("%d", &user_choice);
        
        // 사용자 입력에 따른 출력 및 반환
        switch (user_choice) {
            case 1:
                printf("사용자는 가위를 냈습니다.\n");
                return 1;
            case 2:
                printf("사용자는 바위를 냈습니다.\n");
                return 2;
            case 3:
                printf("사용자는 보를 냈습니다.\n");
                return 3;
            case 0:
                printf("프로그램을 종료합니다.\n");
                return 0;
            default:
                printf("잘못 입력하셨습니다, 다시 입력해 주세요.\n");
                break;
        }
    }
}

// 컴퓨터의 선택을 랜덤하게 생성하는 함수
int random_number() {
    // 1~3 중 랜덤 숫자 생성
    int computer_choice = rand() % 3 + 1;
    
    // 컴퓨터 선택 출력
    switch (computer_choice) {
        case 1:
            printf("컴퓨터는 가위를 냈습니다.\n");
            break;
        case 2:
            printf("컴퓨터는 바위를 냈습니다.\n");
            break;
        case 3:
            printf("컴퓨터는 보를 냈습니다.\n");
            break;
    }

    return computer_choice;
}

// 게임 결과 판단 함수
// 반환값: 1(승), 2(패), 3(무)
int result(int user_choice, int computer_choice) {
    // 무승부
    if (user_choice == computer_choice) {
        printf("비겼습니다.\n");
        return 3;
        // 사용자 승리 조건
    } else if ((user_choice == 1 && computer_choice == 3) ||
               (user_choice == 2 && computer_choice == 1) ||
               (user_choice == 3 && computer_choice == 2)) {
        printf("이겼습니다, 축하합니다.\n");
        return 1;
        // 나머지는 컴퓨터 승리
    } else {
        printf("졌습니다, 분발하세요.\n");
        return 2;
    }
}

// 최종 전적 출력 함수
void count(int win, int lose, int draw) {
    printf("\n[종합 결과]\n");
    printf("> 승 : %d\n", win);
    printf("> 패 : %d\n", lose);
    printf("> 무 : %d\n", draw);
}

int main() {
    srand(time(NULL));  // 난수 초기화 (매번 다른 결과 나오게)

    // 전적 저장 변수 초기화
    int win = 0;
    int lose = 0;
    int draw = 0;
    
    while (1) {
        int user = user_input(); // 사용자 선택
        if (user == 0) break;    // 0이면 종료

        int computer = random_number();     // 컴퓨터 선택
        int outcome = result(user, computer);  // 결과 비교

        // 결과에 따라 카운트 증가
        if (outcome == 1) win++;
        else if (outcome == 2) lose++;
        else if (outcome == 3) draw++;
    }

    // 최종 전적 출력
    count(win, lose, draw);

    return 0;
}

 

⚠️ 주요 포인트

  • srand(time(NULL)): 컴퓨터가 매번 다른 선택을 하도록 시간 기반 난수 초기화.
  • rand() % 3 + 1: 1~3 사이 숫자 랜덤 생성 (1: 가위, 2: 바위, 3: 보)
  • user_input() 함수에서 사용자가 0을 입력하면 게임이 종료
  • 마지막에 count() 함수를 호출해 종합 전적 출력

 

🧪 실행 예시

>>> 가위(1), 바위(2), 보(3), 종료(0) 입력: 
>> 1
사용자는 가위를 냈습니다.
컴퓨터는 보를 냈습니다.
이겼습니다, 축하합니다.

>>> 가위(1), 바위(2), 보(3), 종료(0) 입력: 
>> 2
사용자는 바위를 냈습니다.
컴퓨터는 바위를 냈습니다.
비겼습니다.

>>> 가위(1), 바위(2), 보(3), 종료(0) 입력: 
>> 0
프로그램을 종료합니다.

[종합 결과]
> 승 : 1
> 패 : 0
> 무 : 1

 

 

 

🌟 프로그램 15,  난수 발생 함수를 사용하여 3개의 숫자를 기반으로 하는 슬롯머신 만들기

더보기

🎰 C언어로 제작한 슬롯머신 게임

🎰 소액 베팅이 가능하고, 숫자 조합에 따라 보상을 받는 간단한 미니게임

 

🎮 게임 개요

  • 사용자로부터 100원 미만의 베팅 금액을 입력받음
  • 1~9 사이의 숫자 3개가 무작위로 뽑힘
  • 숫자 조합에 따라 1등(777), 2등(3개 일치), 3등(2개 일치), 꽝 결정
  • 보상:
  • 1등 → 베팅 금액 × 5
  • 2등 → 베팅 금액 × 3
  • 3등 → 베팅 금액 × 2
  • 꽝 → 0
  • 게임은 반복 가능하며, 사용자가 종료를 선택할 수 있음

 

📜 전체 코드

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 슬롯머신 게임을 실행하는 함수
// money: 사용자가 베팅한 금액
// random_number: 3개의 난수(1~9)를 저장할 배열
int run(int money, int random_number[]) {
    int i;
    int prize = 0;  // 당첨된 금액

    srand(time(NULL));  // 현재 시간을 시드로 사용하여 난수 생성 초기화

    // 1~9 사이의 정수를 3개 생성하여 배열에 저장
    for (i = 0; i < 3; i++) {
        random_number[i] = (rand() % 9) + 1;
    }

    // 생성된 난수 출력
    printf(">>> 게임 결과: %d %d %d\n", random_number[0], random_number[1], random_number[2]);

    // 당첨 조건 판정
    if (random_number[0] == 7 && random_number[1] == 7 && random_number[2] == 7) {
        // 1등: 모두 7일 경우
        printf(">>> 🎉 1등! 베팅 금액의 5배를 획득!\n");
        prize = money * 5;
    }
    else if (random_number[0] == random_number[1] &&
             random_number[1] == random_number[2]) {
        // 2등: 모두 같은 숫자일 경우 (단, 모두 7은 제외됨)
        printf(">>> 🥈 2등! 베팅 금액의 3배를 획득!\n");
        prize = money * 3;
    }
    else if (random_number[0] == random_number[1] ||
             random_number[1] == random_number[2] ||
             random_number[0] == random_number[2]) {
        // 3등: 동일한 숫자가 2개일 경우
        printf(">>> 🥉 3등! 베팅 금액 2배 획득!\n");
        prize = money * 2;
    }
    else {
        // 4등: 전혀 일치하지 않음
        printf(">>> 😭 4등... 꽝입니다.\n");
        prize = 0;
    }

    // 최종 상금 출력
    printf(">>> 금액은 %d원 입니다.\n", prize);
    return prize;
}

// 사용자로부터 베팅 금액을 입력받는 함수
// random_number: run 함수에서 사용할 배열을 넘김
int inputMoney(int random_number[]) {
    int money = 0;

    while (1) {
        // 사용자 입력 요청
        printf(">>> 베팅 금액을 입력하세요 <100원 미만 가능>: ");

        // 정수 입력인지 확인
        if (scanf("%d", &money) != 1) {
            printf("잘못된 입력입니다. 정수를 입력해주세요.\n");
            while (getchar() != '\n'); // 입력 버퍼 비우기
            continue;
        }

        // 100원 이상인 경우 경고
        if (money >= 100) {
            printf("⚠ 100원 미만만 입력 가능합니다.\n");
            continue;
        }
        // 0원은 허용하지 않음
        else if (money == 0) {
            printf("⚠ 0원 이상을 입력하여 주세요.\n");
            continue;
        }
        else {
            // 입력이 올바르면 게임 실행
            run(money, random_number);
            break;
        }
    }

    return money;
}

// 메인 함수: 전체 프로그램의 흐름을 제어
int main() {
    int choice;                // 사용자 선택 (계속할지 여부)
    int random_number[3];      // 난수 저장 배열

    while (1) {
        // 베팅 및 게임 수행
        inputMoney(random_number);

        // 게임 계속 여부 확인
        printf("*계속 하시겠습니까? 예<1> 아니요 <0>: ");
        scanf(" %d", &choice);  
        printf("\n");

        // 0 입력 시 종료
        if (choice == 0) {
            printf("계속하려면 아무 키나 누르십시오... \n");
            break;
        }
    }

    return 0;
}

 

📌 기능 설명

기능 항목 설명
run( ) 슬롯머신 숫자 3개 생성, 결과 출력 및 당첨 판별
inputMoney( ) 사용자로부터 베팅 금액 입력받고 유효성 검사
main( )  게임 흐름 전체 관리, 반복 플레이 처리

 

🧪 실행 예시

>>> 베팅 금액을 입력하세요 <100원 미만 가능>: 99
>>> 게임 결과: 4 9 5
>>> 😭 4등... 꽝입니다.
>>> 금액은 0원 입니다.
*계속 하시겠습니까? 예<1> 아니요 <0>: 1

>>> 베팅 금액을 입력하세요 <100원 미만 가능>: 50
>>> 게임 결과: 7 7 7
>>> 🎉 1등! 베팅 금액의 5배를 획득!
>>> 금액은 250원 입니다.
*계속 하시겠습니까? 예<1> 아니요 <0>: 0
계속하려면 아무 키나 누르십시오...

 

 

 

🌟 프로그램 16, 달력 만들기

더보기

📅 C언어 달력 출력 프로그램

📅 사용자가 연도와 월을 입력하면, 해당 월의 달력을 출력하는 프로그램

 

📌 프로그램 개요

  • 윤년 계산을 통해 2월의 마지막 날짜를 올바르게 처리
  • 각 월의 1일이 무슨 요일인지 계산하여 정렬된 달력을 표시

 

📜 전체 코드

#include <stdio.h>

// 윤년 판별 함수
int yearLeap(int year) {
    return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}

// 해당 월의 마지막 날짜 반환 함수
int lastday(int year, int month) {
    int m[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (yearLeap(year)) {
        m[1] = 29;
    }
    return m[month - 1];
}

// 전체 날짜 수 계산 함수 (기준: 1년 1월 1일 → 입력된 날짜까지 총 일수)
int totalday(int year, int month, int day) {
    int total = (year - 1) * 365;
    total += (year - 1) / 4;
    total -= (year - 1) / 100;
    total += (year - 1) / 400;

    for (int i = 1; i < month; i++) {
        total += lastday(year, i);
    }

    total += day;
    return total;
}

// 요일 계산 함수 (0: 일요일 ~ 6: 토요일)
int weekday(int year, int month, int day) {
    return totalday(year, month, day) % 7;
}

int main() {
    int year, month;

    // 사용자 입력
    printf("년, 월을 입력하세요 >> ");
    scanf("%d %d", &year, &month);
    printf("입력하신 날짜는 %d년 %d월 입니다.\n", year, month);

    // 달력 출력
    printf("\n-----------------------------\n");
    printf(" Sun Mon Tue Wed Thu Fri Sat\n");
    printf("-----------------------------\n");

    int firstDay = weekday(year, month, 1); // 해당 월 1일의 요일
    int last = lastday(year, month);        // 해당 월의 마지막 날짜

    // 공백 출력 (1일 시작 위치 맞추기)
    for (int i = 0; i < firstDay; i++) {
        printf("    ");
    }

    // 날짜 출력
    for (int i = 1; i <= last; i++) {
        printf(" %3d", i);
        if ((firstDay + i) % 7 == 0) {
            printf("\n");
        }
    }

    return 0;
}

 

🧩 기능 설명

기능 이름 설명
yearLeap() 윤년 여부 판단 (윤년: 2월이 29일)
lastday() 입력된 연도와 월에 따른 해당 월의 마지막 날짜 변환
totalday() 기준일(1년 1월 1일)부터 입력 날짜까지의 총 일수 계산
weekday() 입력된 날짜의 요일 계산 (일: 0 ~ 토: 6)
main() 연/월 입력 → 1월 요일 계산 → 달력 형식 출력 처리

🧪 실행 예시

년, 월을 입력하세요 >> 2025 6
입력하신 날짜는 2025년 6월 입니다.

-----------------------------
 Sun Mon Tue Wed Thu Fri Sat
-----------------------------
  1   2   3   4   5   6   7
  8   9  10  11  12  13  14
 15  16  17  18  19  20  21
 22  23  24  25  26  27  28
 29  30

 

 

 

🌟 프로그램 17,  난수 발생 함수를 사용하여 3개의 숫자를 기반으로 하는 숫자 야구 게임 만들기

더보기

⚾ C언어 숫자 야구 게임

⚾ 컴퓨터가 난수 3개 출력, 사용자가 3개를 입력해서 스트라이크, 볼을 맞추는 간단한 미니게임

 

🎮 게임 개요

  • 1부터 9까지의 서로 다른 숫자 3개를 컴퓨터가 무작위로 생성
  • 사용자는 숫자 3개를 입력해 컴퓨터의 숫자와 비교
  • 결과는 스트라이크(위치까지 일치), 볼(숫자는 맞지만 위치가 다름), 이읏(모두 불일치)로 판정
  • 최대 9라운드까지 도전 가능하며, 3 스트라이크가 되면 즉시 승리

 

📜 전체 코드

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 서로 다른 난수 3개 생성
void random_number_func(int random_number[]) {
    int i, j, temp;
    srand(time(NULL));
    for (i = 0; i < 3; ) {
        temp = rand() % 9 + 1;  // 1~9 사이 숫자 생성
        int duplicate = 0;
        for (j = 0; j < i; j++) {
            if (random_number[j] == temp) {
                duplicate = 1;
                break;
            }
        }
        if (!duplicate) {
            random_number[i] = temp;
            i++;
        }
    }
}

int main() {
    int random_number[3];
    int strike = 0;
    int ball = 0;
    int round_num = 1;

    random_number_func(random_number);  // 컴퓨터 숫자 생성

    while (round_num <= 9) {
        int guess[3];

        printf("\n   [ %d Round ]   \n", round_num);
        for (int i = 0; i < 3; i++) {
            do {
                printf("Enter number 1 ~ 9 : ");
                scanf("%d", &guess[i]);

                if (guess[i] < 1 || guess[i] > 9) {
                    printf("⚠️  1~9 사이의 숫자만 입력하세요!\n");
                }
            } while (guess[i] < 1 || guess[i] > 9);
        }

        strike = 0;
        ball = 0;

        // 판정 로직
        for (int i = 0; i < 3; i++) {
            if (guess[i] == random_number[i]) {
                strike++;
            } else {
                for (int j = 0; j < 3; j++) {
                    if (guess[i] == random_number[j]) {
                        ball++;
                    }
                }
            }
        }

        // 결과 출력
        if (strike == 3) {
            printf("[ Strike: 3, Ball: 0 ]\n");
            printf("======== Win ========\n");
            break;
        } else if (strike == 0 && ball == 0) {
            printf("\033[0;31m     [ OUT ]\033[0m\n");  // 빨간색
        } else {
            printf("\033[0;35m[ Strike: %d, Ball: %d ]\033[0m\n", strike, ball);  // 보라색
        }

        round_num++;
    }

    if (strike != 3) {
        printf("=== Game Over! ===\n");
    }

    return 0;
}

 

📌 기능 설명

기능 이름 설명
random_number_func() 중복되지 않는 1~9 사이의 숫자 3개를 무작위로 생성
main() 사용자 입력 → 판정 → 반복 → 결과 출력 흐름 전체 관리
판정 방식 - 숫자와 위치가 모두 맞으면 Strike
- 숫자만 맞으면 Ball
- 모두 틀리면 Out

🧪 실행 예시

   [ 1 Round ]
Enter number 1 ~ 9 : 1
Enter number 1 ~ 9 : 2
Enter number 1 ~ 9 : 3
[ Strike: 1, Ball: 1 ]

   [ 2 Round ]
Enter number 1 ~ 9 : 4
Enter number 1 ~ 9 : 5
Enter number 1 ~ 9 : 6
     [ OUT ]

   [ 3 Round ]
Enter number 1 ~ 9 : 7
Enter number 1 ~ 9 : 2
Enter number 1 ~ 9 : 1
[ Strike: 3, Ball: 0 ]
======== Win ========

 

 

 

🌟 프로그램 18,  로또

더보기

🎲 C언어 로또 티켓 생성기

🎲 3가지 모드로 즐기는 로또 티켓 생성

 

🎮 프로그램 개요

  • 사용자는 1~5개 티켓을 구매할 수 있습니다.
  • 각 티켓은 1~45 범위의 서로 다른 숫자 6개로 구성됩니다.
  • 세 가지 모드 제공:
  •     자동: 컴퓨터가 6개 모두 무작위 생성
  •     수동: 사용자가 직접 6개 숫자 입력
  •     반자동: 사용자가 일부 입력 후, 나머지는 자동으로 생성
  • 현재 날짜와 함께 티켓 번호 출력

 

📜 전체 코드

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX_TICKETS 5
#define MIN_TICKETS 1

// 중복 확인 함수
int is_duplicate(int *arr, int size, int num) {
    for (int i = 0; i < size; i++) {
        if (arr[i] == num) return 1;
    }
    return 0;
}

// 자동 번호 생성 함수
void generate_auto_ticket(int *ticket, int start_idx) {
    int i = start_idx;
    while (i < 6) {
        int num = rand() % 45 + 1;
        if (!is_duplicate(ticket, i, num)) {
            ticket[i++] = num;
        }
    }
}

// 지급기한 계산용 함수 (현재는 미사용)
void print_due_date() {
    time_t t = time(NULL);
    struct tm tm = *localtime(&t);
    tm.tm_year += 1;
    mktime(&tm);
    // printf("   지급기한: %d/%d/%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
}

int main() {
    srand(time(NULL));
    int num_tickets, mode;
    int lotto_tickets[MAX_TICKETS][6];

    printf("ㅡ ㅡ ㅡ ㅡ Lotto ㅡ ㅡ ㅡ ㅡ\n");

    // 티켓 수 입력
    while (1) {
        printf("\nSystem: 몇 개를 구매하시겠어요?(1~5) \n입력 >> ");
        if (scanf("%d", &num_tickets) == 1 && num_tickets >= MIN_TICKETS && num_tickets <= MAX_TICKETS)
            break;
        printf("\n\033[0;31mSystem: (min)1 ~ (max)5개를 입력해주세요.\033[0m\n");
        printf("\033[0;31mSystem: 다시 입력해주세요.\033[0m\n");
        while (getchar() != '\n');
    }

    // 모드 선택
    while (1) {
        printf("\nSystem: 1.자동 2.반자동 3.수동\n입력 >> ");
        if (scanf("%d", &mode) == 1 && (mode >= 1 && mode <= 3))
            break;
        printf("\033[0;31mSystem:잘못된 입력입니다. 다시 선택해주세요.\033[0m\n");
        while (getchar() != '\n');
    }

    // 티켓 생성
    for (int i = 0; i < num_tickets; i++) {
        int ticket[6] = {0};
        int num_count = 0;

        if (mode == 1) {  // 자동
            generate_auto_ticket(ticket, num_count);
        }
        else if (mode == 3) {  // 수동
            printf("Lotto %d 수동입력\n", i + 1);
            while (num_count < 6) {
                printf(">> ");
                int num;
                if (scanf("%d", &num) == 1 && num >= 1 && num <= 45 && !is_duplicate(ticket, num_count, num)) {
                    ticket[num_count++] = num;
                } else {
                    printf("\033[0;31mSystem:중복 없이 1 ~ 45 숫자를 입력해주세요.\033[0m\n");
                }
                while (getchar() != '\n');
            }
        }
        else if (mode == 2) {  // 반자동
            printf("Lotto %d 반자동입력\n", i + 1);
            while (num_count < 6) {
                printf(">> 0 입력시 자동으로 채움.\n");
                int num;
                if (scanf("%d", &num) == 1 && num == 0) {
                    generate_auto_ticket(ticket, num_count);
                    break;
                }
                else if (num >= 1 && num <= 45 && !is_duplicate(ticket, num_count, num)) {
                    ticket[num_count++] = num;
                } else {
                    printf("중복 없이 1 ~ 45 숫자를 입력해주세요.\n");
                }
                while (getchar() != '\n');
            }
        }

        // 티켓 저장
        for (int j = 0; j < 6; j++) {
            lotto_tickets[i][j] = ticket[j];
        }
    }

    // 출력
    printf("\n    💰 Lotto 6/45 💰\n");
    time_t t = time(NULL);
    struct tm tm = *localtime(&t);
    printf("\033[0;35m발행일: %d/%d/%d (%s) %d:%d:%d\033[0m\n",
           tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
           (const char*[]){"일", "월", "화", "수", "목", "금", "토"}[tm.tm_wday],
           tm.tm_hour, tm.tm_min, tm.tm_sec);

    print_due_date();  // 지급기한 출력 (현재 주석 처리됨)

    for (int i = 0; i < num_tickets; i++) {
        for (int j = 0; j < 6; j++) {
            if (j < 5)
                printf("\033[0;35m|\033[0m %2d ", lotto_tickets[i][j]);
            else
                printf("\033[0;35m|\033[0m %2d \033[0;35m|\033[0m\n", lotto_tickets[i][j]);
        }
    }

    printf("\033[0;35m  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\033[0m\n");
    return 0;
}

 

📌 기능 설명

기능 이름 설명
is_duplicate() 번호 중복 여부 확인
generate_auto_ticket() 자동으로 1~45 중복 없는 번호 6개 생성 (필요 시 부분만 생성)
print_due_date() 지급기한(1년 후) 계산 (현재는 출력은 하지 않음)
main() 전체 게임 흐름 제어, 모드 선택 및 티켓 출력

🧪 실행 예시

ㅡ ㅡ ㅡ ㅡ Lotto ㅡ ㅡ ㅡ ㅡ

System: 몇 개를 구매하시겠어요?(1~5) 
입력 >> 2

System: 1.자동 2.반자동 3.수동
입력 >> 1

    💰 Lotto 6/45 💰
발행일: 2025/6/21 (토) 13:23:12

|  4 | 18 | 23 | 31 | 37 | 42 |
|  2 |  9 | 14 | 20 | 36 | 45 |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

 

 

 

🌟 프로그램 19,  반짝이는 트리 만들기!

더보기

🎄 C언어 반짝이는 트리 프로그램

 

✨ 프로그램 개요

  • 콘솔 화면에서 트리 모양을 출력하고, 트리 꼭대기의 별(☆, ★)이 1초 간격으로 번갈아 나타나며 반짝이는 애니메이션을 보여줍니다.
  • 무한 반복되며 Ctrl + C로 종료할 수 있습니다.
  • system("clear") 또는 system("cls")를 사용하여 화면을 지운 뒤 새로운 프레임을 출력합니다.
  • sleep(1)을 통해 1초 간격으로 전환됩니다.

 

📜 전체 코드

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>  // 유닉스 계열에서 sleep 사용

// 트리 출력 함수 (☆ 별)
int clear_star() {
    printf("     ☆  \n");
    for (int i = 1; i <= 4; i++) {
        for (int j = 0; j < (6 - i); j++) {
            printf(" ");
        }
        for (int j = 0; j < (2 * i - 1); j++) {
            printf("◻️");
        }
        printf("\n");
    }
    return 0;
}

// 트리 출력 함수 (★ 별)
int black_star() {
    printf("     ★  \n");
    for (int i = 1; i <= 4; i++) {
        for (int j = 0; j < (6 - i); j++) {
            printf(" ");
        }
        for (int j = 0; j < (2 * i - 1); j++) {
            printf("◻️");
        }
        printf("\n");
    }
    return 0;
}

// 메인 함수
int main() {
    while (1) {
        system("clear");   // 화면 지우기 (Windows에선 "cls")
        clear_star();      // ☆ 출력
        sleep(1);          // 1초 대기

        system("clear");
        black_star();      // ★ 출력
        sleep(1);          // 1초 대기
    }
    return 0;
}

 

🧩 기능 설명

기능 이름 기능 설명
clear_star() 트리 위에 ☆를 출력하며 트리 구조를 보여줌
black_star() 트리 위에 ★를 출력하며 반짝이는 효과를 표현
main() 두 가지 별 모양을 번갈아 출력하며 무한 반복 애니메이션 실행

🧪 실행 예시 (출력 결과의 예로, 화면이 매번 갱신되며 ★/☆가 깜빡임)

     ☆  
     ◻️
    ◻️◻️◻️
   ◻️◻️◻️◻️◻️
  ◻️◻️◻️◻️◻️◻️◻️

     ★  
     ◻️
    ◻️◻️◻️
   ◻️◻️◻️◻️◻️
  ◻️◻️◻️◻️◻️◻️◻️

 

 

 

 

🌟 프로그램 20,  풍차 만들기

더보기

🌀 C언어 바람개비 애니메이션

🌀 풍차 돌리기

 

🎮 프로그램 개요

  • 터미널(콘솔)에서 바람개비 모양 패턴을 출력하고, 두 가지 모양을 250밀리초 간격으로 번갈아 출력하여
    마치 회전하는 바람개비처럼 보이게 만드는 애니메이션 프로그램입니다.
  • 무한 반복되며, Ctrl + C로 종료합니다.
  • usleep(250000)을 이용해 0.25초 간격으로 전환합니다.

 

📜 전체 코드

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>  // usleep 함수 사용

int print_windmill();
int print_windmill_2();

int main() {
    while (1) {
        system("cls");  // Windows에서는 "cls", mac/Linux는 "clear"
        print_windmill();
        usleep(250000);  // 0.25초 대기

        system("cls");
        print_windmill_2();
        usleep(250000);  // 0.25초 대기
    }
    return 0;
}

// 바람개비 모양 1
int print_windmill() {
    int i, j;

    for (i = 1; i <= 5; i++) {
        for (j = i; j > 0; j--) printf("  ");
        printf("\n");
    }
    for (i = 1; i <= 5; i++) {
        for (j = i; j > 0; j--) printf("  ");
        for (j = 5 - i; j >= 0; j--) printf(" *");
        for (j = 5 - i; j >= 0; j--) printf("  ");
        for (j = i; j > 0; j--) printf("* ");
        printf("\n");
    }
    for (i = 1; i <= 5; i++) {
        for (j = 5 - i; j >= 0; j--) printf(" *");
        for (j = i; j > 0; j--) printf("  ");
        for (j = i; j > 0; j--) printf("* ");
        for (j = 5 - i; j >= 0; j--) printf(" ");
        printf("\n");
    }
    return 0;
}

// 바람개비 모양 2
int print_windmill_2() {
    int i, j;

    for (i = 0; i <= 5; i++) {
        for (j = 0; j <= 6; j++) printf("  ");
        for (j = 0; j <= i - 3; j++) printf("* ");
        printf("\n");
    }
    for (i = 1; i <= 4; i++) {
        for (j = 0; j < 4 - i; j++) printf("  ");
        for (j = 0; j < 2 * i - 1; j++) printf("* ");
        for (j = 0; j < 4 - i; j++) printf("  ");
        for (j = 0; j <= 4 - i; j++) printf("* ");
        printf("\n");
    }
    for (i = 0; i <= 4; i++) {
        for (j = 0; j < 7 - i; j++) printf("  ");
        for (j = 0; j < i; j++) printf("* ");
        for (j = 0; j < i; j++) printf("  ");
        for (j = 0; j < (4 - i) * 2 - 1; j++) {
            if ((4 - i) * 2 - 1 > 0)
                printf("* ");
        }
        printf("\n");
    }
    for (i = 0; i < 5; i++) {
        for (j = 0; j < 4; j++) printf("  ");
        for (j = 0; j < i; j++) printf("  ");
        for (j = 0; j < 3 - i; j++) printf("* ");
        printf("\n");
    }
    return 0;
}

 

🧩 기능 설명

함수 이름 설명
print_windmill() 바람개비 모양 1 출력
print_windmill_2() 바람개비 모양 2 출력
main() 무한 루프 내에서 두 모양을 교차 출력하여 회전 효과 구현

🧪 실행 예시

 

 

 

 

 

 

 

 

 

 

미리보기용

'C > Task' 카테고리의 다른 글

C언어 간단한 프로그램 1  (0) 2025.06.17
C언어 함수  (0) 2025.06.16
C언어 배열  (0) 2025.06.16
C언어 배열 정리  (0) 2025.06.15
06/12 반복구조  (0) 2025.06.12
'C/Task' 카테고리의 다른 글
  • C언어 간단한 프로그램 1
  • C언어 함수
  • C언어 배열
  • C언어 배열 정리
eull
eull
eull 님의 블로그 입니다.
  • eull
    eull 님의 블로그
    eull
  • 전체
    오늘
    어제
    • 개발 환경 (31)
      • MYSQL_Workbench (1)
        • setting (1)
      • Linux_Ubuntu (2)
        • Task (1)
        • Setting (1)
      • C (19)
        • Concept (4)
        • Task (8)
        • Project (1)
        • Study (5)
        • Setting (1)
      • C++ (1)
        • Study (0)
        • Concept (1)
      • Python (6)
        • Task (4)
        • Project (2)
      • 일상 (1)
      • Setting (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
eull
C언어 간단한 프로그램 2
상단으로

티스토리툴바