본문 바로가기

C

[C언어] 실습: 구조체 'car'로 자동차, 속도, 연료 상태 출력하기

반응형

구조체 'car'로 자동차, 속도, 연료 상태 출력하기

조건1. Accel을 밟으면 속도는 10km/s씩 증가하고, 연료는 2%씩 감소

조건2. Break를 밟으면 속도는 10km/s씩 감소

조건3. 자동차 최대 속도는 200km/s


#include<stdio.h>

#define MAX_SPEED 200   // 최고 속도
#define STEP 2          // 연료 소모량
#define FULL 10         // 증감 속도량

struct car {         // 구조체 car 선언
    char name[20];   // 자동차
    int speed;       // 현재 속도
    int gas;         // 현재 연료
};

typedef struct car Car;   // 모든 함수에서 사용하기 위해 전역변수로 만들어준다.
                          // struct car == Car

void carStatus(Car*);   // 자동차의 현재상태를 출력하는 함수
void carAccel(Car*);    // 악셀 패달을 밟는 동작을 구현하는 함수
void carBreak(Car*);    // 브레이크 패달을 밟는 동작을 구현하는 함수

int main() {

    Car c = { "my_car", 0, 100 };   // 구조체 변수 c를 선언한다.
                                  // char name[20] = "my_car";
                                  // int speed = 0;
                                  // int gas = 100;

    printf("초기화된 상태의 차 정보\n");
    carStatus(&c);   // 구조체에 저장된 정보를 출력하는 함수를 정의하기 위해 구조체의 주소값을 전달한다.

    printf("악셀을 밟은 후의 차 정보\n");
    carAccel(&c);
    carStatus(&c);

    return 0;
}

void carStatus(Car* c) {                       // *c.name == c->name
    printf("자동차명 : %s\n", c->name);        // 구조체의 포인터는 '->'로 표시한다.
    printf("현재속도 : %d km/s\n", c->speed);
    printf("현재연료 : %d %%\n\n", c->gas);   // '%'는 서식문자에 사용되고 있다. 따라서 그 기능을 무효화해주기 위해 '%%'를 입력해준다.
}

void carAccel(Car* c) {                  // Accel을 밟아 speed를 증가시키는 함수이다. 그리고 동시에 gas를 소모한다.
    if (c->gas >= STEP) {                  // gas가 연료 소모량 STEP(2)보다 크거나 같다면,
        c->gas -= STEP;                   // gas를 2 소모한다.
        if (c->speed + FULL > MAX_SPEED)   // speed 값이 MAX_SPEED(200)를 초과하는지 확인한다. 만약 MAX_SPEED(200)을 초과하면,
            c->speed = MAX_SPEED;          // speed는 MAX_SPEED, 즉 speed의 최댓값을 저장한다.
        else
            c->speed += FULL;              // 그렇지 않고 MAX_SPEED(200)보다 작으면, speed는 10km/s 증가한다.
    }
    else
        printf("연료가 부족합니다\n");    // gas를 STEP(2)씩 소모하는데, gas가 STEP(2)보다 작으면 연료가 부족하다는 경고문을 출력한다.
}

void carBreak(Car* c) {    // break를 밟아 speed를 감소시키는 함수이다.
    if (c->speed < FULL)    // speed가 FULL(10)보다 작으면,
        c->speed = 0;       // speed를 0으로 만들어준다.
    else
        c->speed -= FULL;   // 그렇지 않으면 speed를 10 감소시킨다.
}

 

반응형