💡 자료구조

Music Library Program 구현 시작

ji-hyun 2021. 8. 19. 18:08

※ 인프런 강의 "C로 배우는 자료구조 및 여러가지 예제실습(권오흠 교수님)"를 보고 개인적인 복습을 위해 정리한 내용입니다.

 

 

 

main.cpp 에서 read_line 함수를 호출하면

string_tools.cpp 에서 read_line 함수를 정의한 것을 불러오게 됨

 

이들을 연결시켜주기 위한 메커니즘은..

string_tools.h에 read_line 함수의 프로토타입을 써주어야 하고

main.cpp#include "string_tools.h" 헤더파일 포함시켜야 함

 

그리고

string_tools.cpp 에 자신이 해당하는 헤더파일 include "string_tools.h" 해서 포함시켜주면

연결 완성

 

 

 

 

 

<string_tools.h 헤더파일 - 소스코드>

 

#pragma once
#include <stdio.h>


int read_line(FILE *fp, char str[], int n);    // 함수 프로토타입

 

여기서 #pragma once"헤더파일이 중복 include 되는 것을 방지" 하는 문장이다. 비쥬얼 스튜디오의 버전에 따라 지원이 될수도 있고 안될 수도 있다.

 

수업시간에 배운 #ifndef - #endif 지시어를 사용할 수도 있다.

 

 

 


중복된 헤더 파일 문제를 해결하기 위한 지시어 사용법을 다시 복습해보자.

#ifndef - #endif

 

#ifndef BOOLEAN_H   // 여기서 파일 이름 Boolean.h 을 대문자로 바꿔쓰는건 관습
#define BOOLEAN_H

#define TRUE 1
#define FALSE 0
#typedef int bool;
#endif

 

#ifndef 

: 만약 Boolean.h 가 정의되어있지 않으면 아래가 유효하다는 뜻이다.

이미 정의되어 있다면 아래를 무시한다.

 


 

 

<string_tools.h 헤더파일 - 소스코드>

위에 배운 지시어를 사용하여 다시 소스코드문을 작성하였다.

 

#ifndef STRING_TOOLS_H
#define STRING_TOOLS_H

#include <stdio.h>

int read_line(FILE *fp, char str[], int n);

#endif

 

 

 

 

main.cpp 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "string_tools.h"

#define BUFFER_LENGTH 200

int main() {

	process_command();

}

void process_command() {

	char command_line[BUFFER_LENGTH];
	char *command;

	while (1) {      // infinite loop
		printf("$ ");     // prompt

		if (read_line(stdin, command_line, BUFFER_LENGTH) <= 0)
			continue;

		command = strtok(command_line, " ");   // 첫번째 command 를 입력 받는다
		if (strcmp(command, "add") == 0)
			handle_add();
		/*
		else if (strcmp(command, "search") == 0)
			handle_search();
		else if (strcmp(command, "remove") == 0)
			handle_remove();
		else if (strcmp(command, "status") == 0)
			handle_status();
		else if (strcmp(command, "play") == 0)
			handle_play();
		else if (strcmp(command, "save") == 0)
			handle_save();
		*/
		else if (strcmp(command, "exit") == 0)
			break;


	}

}

 

strtok 함수 복습▼

2021.06.22 - [자료구조] - 전화번호부 v3.0 - 배열 재할당, 라인단위 입력과 문자열 tokenizing

 

 

 

이제 handle_add 함수가 어떻게 작동해야 하는지 실행결과를 먼저 살펴보자.

 

 

 

 

void handle_add() {

	char buffer[BUFFER_LENGTH];
	char *artist = NULL, *title = NULL, *path = NULL;

	printf("     Artist: ");
	if (read_line(stdin, buffer, BUFFER_LENGTH) > 0)
		artist = strdup(buffer);

	printf("     Title: ");
	if (read_line(stdin, buffer, BUFFER_LENGTH) > 0)
		title = strdup(buffer);

	printf("     Path: ");
	if (read_line(stdin, buffer, BUFFER_LENGTH) > 0)
		path = strdup(buffer);


	/* add to the music library */
}

 

 

 

 

 

 

이제 handle_add 함수 안에 add_song 함수를 통해 곡을 실제로 추가를 해주도록 만들 것이다.

add_song 함수는 library.cpp 에서 구현할 것이며, main.cpp 와 연결되도록 해주어야 한다. 위에 배웠던 것과 마찬가지로 아래 순서들을 통해 연결시켜준다.

 

① main.cpp 의 add_song 함수를 library.cpp 에 정의한다.

② library.h 에 add_song 함수 프로토타입을 작성한다.

main.cpp 와 library.cpp 파일들에게 #include "library.h" 를 작성한다.

 

 

▼ library.h

 

#ifndef LIBRARY_H
#define LIBRARY_H

void add_song(char *artist, char *title, char *path);

#endif        // LIBRARY_H

 

 

 

 

 

이번 시간에는 헤더파일을 포함하는 방법에 대한 내용을 중점적으로 배워봤다. add_song 함수에 대한 자세한 설명은 다음 게시물에서 이어나가겠다.

(연결리스트의 개념이 들어갈 것이다.)

 

 

'💡 자료구조' 카테고리의 다른 글

Music Library Program - add_song 함수  (0) 2021.08.19
이중연결리스트  (0) 2021.08.10
연결리스트 - 다항식  (0) 2021.08.04
연결리스트 - 함수들 정리  (0) 2021.08.04
연결리스트 - 순회하기  (0) 2021.08.04