강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

사진한장만님의 프로필 이미지
사진한장만

작성한 질문수

함수에 있는 printf가 안돼요.

작성

·

241

0

// main.c
#include "music.c"

int main()
{
	int choice, anser, data;
	
	
	while (1)
	{
		system("cls");
		printf("\n\n\t 음악차트 프로그램 \n\n");
		printf("\t 1. 전체차트 \t 2. 인기차트 \t 3. 나만의 차트 \t 4. 곡추가 \t 0. exit\n");
		printf("\t choice : [	]\b\b");
		scanf("%d", &choice);
		while (getchar() != '\n');
		
		switch (choice)
		{
			case 1:	//1. 전체차트
				{
					void songchartlist();
					printf("전체차트출력\n");
				}
				break;
			case 2:	//2. 인기차트
				
				break;
			case 3:	//3. 나만의 차트
			
				break;
			case 4:
				printf("\n\n 곡추가 \n\n");
				printf("어디에 추가하시겠습니까?\n");
				printf("\t 1. 맨앞 추가 \t 2. 중간 추가 \t 3. 맨뒤 추가 \t 4. 삭제 \t 5. 취소 \n");
				scanf("%d", &anser);
				if(1 == anser)
				{
					//void insertfrontnode();
				}
				break;
			case 0:
				exit(0);
		}
		printf("\n\n\t\t");
		system("pause");
	}
	return 0;
}

//music.c
#include "music.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


song* head = NULL;




void songchartlist() // 음악 
{
    song* newsong = (song*)malloc(sizeof(song));
    strcpy(newsong->title, "미아");
    strcpy(newsong->artist, "아이유");
    strcpy(newsong->lyrics, "우리 둘 담아 준 사진을 태워");
    newsong->views = 0;
    newsong->next = NULL;
    head = newsong;
    
    printf("%s\n", newsong->title);
	while (getchar() != '\n');
}

// music.h
#include <stdio.h>


typedef struct node{ //단순연결리스트 
	char title[50];
    char artist[50];
    char lyrics[200];
    int views;
    int value;
	struct node* next;
}song;

void songchartlist();
//void insertfrontnode();

/*main.c, music.c, music.h 3가지 파일을 만들었습니다 
case 1 을 실행시켜도 void songchartlist() 함수에
프린트가 안되는 이유를 알려주실 수 있나요?*/

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님의 코드를 살펴보았을 때, main.c 파일의 case 1 안에서 songchartlist() 함수를 호출하고자 하는 것 같은데, 실제로 그 함수를 호출하고 있지 않습니다. 님이 작성한 void songchartlist(); 라인은 함수의 원형을 재선언하는 것일 뿐이며, 함수를 호출하는 것은 아닙니다.

함수를 호출하려면 songchartlist(); 와 같이 함수 이름 뒤에 괄호를 붙여 작성해야 합니다. 따라서 case 1 부분을 다음과 같이 수정해야 합니다:

// main.c에서 case 1 수정 부분
case 1: //1. 전체차트
{
	songchartlist(); // songchartlist 함수 호출
	printf("전체차트출력\n");
}
break;

또한 #include "music.c" 대신에 #include "music.h"를 사용하여 헤더 파일만을 포함시켜야 합니다. .c 소스 파일을 직접 include하는 것은 일반적인 C 프로그래밍 방식이 아닙니다. 수정할 경우 main.c 파일의 상단은 다음과 같이 보일 것입니다:

// main.c 수정된 #include 부분
#include "music.h" // .h 헤더를 include
...

이렇게 수정하면 main.c 파일에서 songchartlist() 함수가 올바르게 호출되어 음악 차트를 출력할 수 있을 것입니다.

사진한장만님의 프로필 이미지
사진한장만

작성한 질문수

질문하기