반응형
열거형이란?

열거형이란 사용자 정의 자료형이며 상수들의

집합을 정의할때 사용하는 데이터 형식이다.

열거형은 관련된 상수들을 그룹화하는 것입니다.

 

 

 

 

열거형의 장점

열거형은 코드에서 특정 값을 명확하게 의미를 가진 상수로

사용하여 코드의 가독성을 높이고 유지보수성을 향상시킵니다.

 

 

 

열거형 사용법

열거형은 아래의 코드와 같이 정의할 수 있습니다.

아래의 코드처럼 직접 값을 할당해주지 않으면, 0부터 1씩

증가하는 값이 할당된다.

enum Day
{
    SUNDAY,		// 0
    MONDAY,		// 1
    TUESDAY,		// 2
    WEDNESDAY,		// 3
    THURSDAY,		// 4
    FRIDAY,		// 5
    SATURADAY		// 6
};

 

아래의 코드처럼 직접 임의의 값을 할당해주면, 아래의 값을 얻습니다.

enum Month
{
    JANUARY = 1,	// 1
    FEBRUARY,		// 2
    MARCH = 5,		// 5
    APRIL,		// 6
    MAY = 10,		// 10
    JUNE		// 11
};

 

반응형

 

반응형

'C' 카테고리의 다른 글

파일 입출력  (0) 2023.05.23
공용체(Union)  (0) 2023.05.23
구조체 변수 연산, 초기화  (0) 2023.05.23
구조체 변수 전달과 반환  (0) 2023.05.23
구조체 typedef 선언  (1) 2023.05.23
반응형
파일 입출력

데이터 입출력을 위해서는 스트림이 형성되어야 한다.

 

아래의 코드처럼 FILE* fopen(파일의 경로 / 스트림의 종류(읽기용 쓰기용 / 바이너리 텍스트파일)mode)사용됩니다.

FILE* fopen(const char *filename, const char *mode);

 

fopen 함수는 스트림의 생성 요청

fclose 함수는 스트림의 소멸 요청

fopen함수를 사용하면 fclose사용을 꼭 해야한다.

그렇지 않으면 메모리 누수 현상이 일어난다.

 

 

파일의 개방 모드

아래는 스트림의 모드이다.

모드(mode) 스트림의 성격 파일이 없을때
r 읽기 가능 에러
w 쓰기 가능 생성
a 파일의 끝에 덧붙여 쓰기 가능 생성
r+ 읽기 / 쓰기 가능 에러
w+ 읽기 / 쓰기 가능 생성
a+ 읽기 / 덧붙여 쓰기 가능 생성

아래와 같이 조합하여 스트림의 형태를 결정할 수 있다.

FILE* file1 = fopen("text.txt", "wt");	// 텍스트 쓰기 모드 스트림생성
FILE* file2 = fopen("text.txt", "rt");	// 텍스트 읽기 모드 스트림생성
FILE* file3 = fopen("text.txt", "wb");	// 바이너리 쓰기 모드 스트림생성
FILE* file3 = fopen("text.txt", "rb");	// 바이너리 읽기 모드 스트림생성

 

 

 

파일 입출력 함수들

아래의 함수들은 FILE구조체의 포인터를 인자로 전달하여 파일을

대상으로 입출력을 할 수 있는 함수들이다.

int fputc(int c, FILE* stream);			// 문자 출력
int fgetc(FILE* stream);			// 문자 입력
int fputs(const char* s, FILE* stream);		// 문자열 출력
char* fgets(char* s, int n, FILE* stream);	// 문자열 입력

 

 

feof : 파일의 끝을 확인하는 함수

파일의 끝에 도달한 경우 0이 아닌 값 반환

파일 입력함수는 오류가 발생하는 경우에도 EOF를 반환한다.

따라서 feof는 EOF의 반환원일을 확인하기 위한 함수이다.

 

0이 아니면 파일의 끝에 도달한 것이고, 그 외에 경우는 오류가 발생한 경우이다.

int feof(FILE* stream);

 

 

 

fread : 바이너리 데이터 읽기

바이너리 데이터를 파일에서 읽을 때 사용되는 함수

성공 시 전달인자 count, 실패 또는 파일의 끝 도달 시 count보다 작은 값 반환

size_t fread(void* buffer, size_t size, size_t count, FILE* stream);

 

 

fwrite : 바이너리 데이터 쓰기

바이너리 데이터를 파일에 쓸 때 사용되는 함수

성공 시 전달인자 count, 실패 시 count보다 작은 값 반환

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

 

fprintf

파일에 데이터를 쓰는 용도의 함수입니다.

함수원형은 아래의 코드와 같다.

성공적으로 데이터를 쓴 경우 문자 수를 반환하며, 실패한 경우

음수 값을 반환합니다.

int fprintf(FILE* stream, const char* format, ...);

 

 

fscanf

파일에서 데이터를 읽어오는 용도의 함수입니다.

함수원형은 아래의 코드와 같다.

성공적으로 데이터를 읽은 경우 문자 수를 반환하며, 실패한 경우

EOF(End-Of-File)를 반환합니다.

int fscanf(FILE* stream, const char* format, ...);

 

 

 

Text / Binary 의 잡합체인 구조체 변수 입출력

fprintf()함수 와 fscanf()함수를 사용하여 구조체 변수를

파일에 쓰거나 파일에서 읽어올 수 있다.

 

아래의 스트림 모드로 구조체 변수를 Text / Binary형태로 입출력 할 수 있다.

  • wt : 텍스트 쓰기
  • rt : 텍스트 읽기
  • wb : 바이너리 쓰기
  • rb : 바이너리 읽기

 

 

파일 위치 지시자

파일 위치 지시자는 파일 내에서 현재 위치를 나타내는 값입니다.

파일 위치 지시자는 파일 입출력 함수 fseek(), ftell()와 함께 사용됩니다.

 

 

 

fseek : 파일 위치 지시자 이동

파일 위치 지시자의 참조 위치를 변경시킨다.

성공적으로 파일 위치 지시자를 이동시키면 0을 반환하고,

실패하면 EOF(End-Of-File)를 반환합니다.

  • SEEK_SET : 파일의 처음 위치
  • SEEK_END : 파일의 마지막 위치
  • SEEK_CUR : 파일의 현재 위치
int fseek(FILE* stream, long offset, int whereFrom);	// 파일 위치 지시자의 참조 위치를 변경

 

 

ftell : 현재 파일 위치 지시자의 위치

현재 파일 위치자의 위치 정보를 반환해준다.

파일 위치 지시자의 현재 위치를 나타내는 값으로,

long타입으로 반환됩니다. 실패하면 -1을 반환합니다.

long ftell(FILE* stream);	// 파일 위치 지시자의 취지 정보 반환

 

반응형

 

반응형

'C' 카테고리의 다른 글

열거형  (0) 2023.05.23
공용체(Union)  (0) 2023.05.23
구조체 변수 연산, 초기화  (0) 2023.05.23
구조체 변수 전달과 반환  (0) 2023.05.23
구조체 typedef 선언  (1) 2023.05.23
반응형
공용체(Union)란?

공용체는 여러개의 멤버변수가 같은 메모리 영역을 공유하는 데이터 구조이다.

구조체와 유사하지만 다른점은 멤버들이 메모리를 공유한다는 차이가 있다.

공용체 멤버변수들은 메모리 공간을 공유하기에 한 번에 하나의 멤버만 사용할 수 있다.

멤버 중 어느 하나 값을 할당하면, 다른 멤버들의 값은 유효하지 않게 된다.

 

 

공용체(Union) 선언

공용체(Union)의 선언 방식은 구조체와 같다.

키워드만 struct대신에 union을 쓰면된다.

typedef union ubox
{
    int num1;
    int num2;
    double num3;
}UBox;

 

공용체를 사용한 이유

예전에는 하드웨어 발전이 느려서 메모리 공간이 부족했다.

공용체는 다양한 형식의 데이터를 동일한 메모리 공간에서 사용할 때 유용하다.

그래서 메모리 공간을 절약하기 위해 공용체를 사용하였는데,

현재는 하드웨어의 발전에 의해서 메모리 공간이 다소 충분해져서

공용체는 점차 사용되지 않고 있는 추세입니다.

 

 

반응형
반응형

'C' 카테고리의 다른 글

열거형  (0) 2023.05.23
파일 입출력  (0) 2023.05.23
구조체 변수 연산, 초기화  (0) 2023.05.23
구조체 변수 전달과 반환  (0) 2023.05.23
구조체 typedef 선언  (1) 2023.05.23
반응형
구조체 연산

구조체끼리의 연산은 불가능하다

하지만 멤버변수끼리의 연산은 가능합니다.

그리고 구조체끼리 할당은 가능합니다!

typedef struct
{
    int x;
    int y;
} Point;

int main()
{
    Point point1 = {3, 4};
    Point point2 = {1, 2};
    
    point1 + point2;		// 컴파일 에러
    point1.x + point2.x		// 컴파일 성공
    
    point1 = point2;		// 컴파일 성공
}

 

 

 

구조체 전달, 반환

아래의 코드처럼 구조체는 함수에서 매개변수로 전달이 될 수도, 반환형이 될 수 도 있습니다.

typedef struct
{
    char name[20];
    int age;
} Person;

void ModifyPerson(Person* person)
{
    person->age = 29;
}

Person CreatePerson()
{
    Person person;
    strcpy(person.name, "Oh_gun");
    person.age = 19;
    return person;
}

int main()
{
    Person person1 = CreatePerson();
    
    ModifyPerson(&person1);
}

 

 

 

구조체 초기화 방법

아래의 코드처럼 초기화할 수 있다.

typedef struct
{
    int x;
    int y;
} Point;

typedef sturct
{    
    Point center;
    double radius;
} Circle;

int main()
{
    Point point1 = { 3, 5 };
    Circle circle1 = { point1, 3.5 };		// x : 3, y : 5, radius : 3.5
    Circle circle2 = { {1}, 4.5 };		// x : 1, y : 0, radius : 4.5
    Circle circle3 = { 4, 5, 5.5 }; 		// x : 4, y : 5, radius : 5.5
}

 

 

반응형

 

반응형

'C' 카테고리의 다른 글

파일 입출력  (0) 2023.05.23
공용체(Union)  (0) 2023.05.23
구조체 변수 전달과 반환  (0) 2023.05.23
구조체 typedef 선언  (1) 2023.05.23
구조체  (0) 2023.05.22
반응형
함수에서의 구조체 변수 전달과 반환

아래의 코드 처럼 매개변수로 구조체 변수를 받을 수 있고,

반환 값으로 구조체 변수를 받을 수 있습니다.

void ShowPosition(Point pos)
{
    printf("[%d, %d] \n", pos.xPos, pos.yPos);
}

Point GetCurrentPosition(void)
{
    Point cen;
	scanf("%d %d", &cen.xPos, &cen.yPos);
    return cen;		// 구조체 변수 cen이 반환.
}

 

 

 

구조체 기반 Call-by-reference

C언어에서는 Call-by-reference는 없다.

하지만 기능은 비슷하기에 편의상 이 글에서는

Call-by-reference라 부르겠습니다.

typedef struct point
{
    int xPos;
    int yPos;
} Point;

void Swap(Point* ptr)
{
    prt -> xPos = (ptr -> xPos) * -1;
    ptr -> yPos = (ptr -> yPos) * -1;
}

int main(void)
{
    Point pos = {5, -5};
    Swap(&pos);		// xPos : -5 yPos : 5
    Swap(&pos);		// xPos : 5 yPos : -5
}

 

반응형

 

반응형

'C' 카테고리의 다른 글

공용체(Union)  (0) 2023.05.23
구조체 변수 연산, 초기화  (0) 2023.05.23
구조체 typedef 선언  (1) 2023.05.23
구조체  (0) 2023.05.22
문자열 관련 함수  (0) 2023.05.22

+ Recent posts