본문 바로가기

c언어 기초

c언어 함수 function - 나도코딩

유튜브 나도코딩 c언어 기초 강의 내용입니다.

 

 

함수는 기본적으로

반환형 함수이름(전달값) {실행할 코드}로 이루어지고, 선언과 정의는 main함수 밖에서 해야한다.

반환값과 전달값은 있을 수도 있고 없을 수도 있다.

 

#include <stdio.h>

void p(int num);

void function_without_return(); 

int function_with_return();

void function_without_params();

void function_with_params(int num1, int num2, int num3);

int apple(int total, int ate);


int main(void)    // main이란 함수인데 파라미터(전달값)이 없고 반환형이 정수형이다. 
                  // void는 반환값이나 전달값이 없을 때 사용된다.
{
	int num = 1;
    p(num);

	

	//반환값이 없는 함수
	function_without_return();

	//반환값이 있는 함수
	int ret = function_with_return();
	p(ret);

	// 파라미터(전달값)가 없는 함수
	function_without_params();

	// 파라미터(전달값)가 있는 함수
	function_with_params(1, 2, 3);

	// 파라미터(전달값)도 받고, 반환값이 있는 함수
	int ret2 = apple(5, 2); // 5개의 사과 중 2개 먹었음
	printf("사과 5개 중 2개를 먹으면 %d개가 남아요.\n\n", ret2);

	printf("사과 %d개 중 %d개를 먹으면 %d개가 남아요.\n\n", 10, 4, apple(10, 4)); //이런식으로 안에서 바로 함수호출 가능

	
    
	return 0;
}



// 정의
void p(int num) // void 함수이름 (전달값), void : 반환하지 않겠다.
{
	printf("num 은 %d 입니다. \n\n",num);
}


void function_without_return()
{
	printf("반환값이 없는 함수입니다.\n\n");
}


int function_with_return()
{
	printf("반환값이 있는 함수입니다.\n\n");
	return 10;
}

void function_without_params()
{
	printf("전달값이 없는 함수입니다.\n\n");
}

void function_with_params(int num1, int num2, int num3)
{
	printf("전달값이 있는 함수이고, 전달받은 값은 %d, %d, %d 입니다.\n\n", num1, num2, num3);
}


int apple(int total, int ate)
{
	printf("전달값과 반환값이 있는 함수입니다.\n\n");
	return total - ate;
}

 

 

 

함수를 정의해두면 간단하게 함수명만 쓰는 것으로 함수를 호출해서 코드를 실행 시킬 수 있으므로 편하다.

 

 

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

int getRandomNumber(int level);

void showQuestion(int level, int num1, int num2);

void success();

void fail();

int main(void)
{
	srand(time(NULL));


	int count = 0;
	for (int i = 1; i <= 5; i++)
	{
		//  x * y = ?
		int num1 = getRandomNumber(i);
		int num2 = getRandomNumber(i);

		showQuestion(i, num1, num2);

		int answer = -1;
		scanf_s("%d", &answer);

		if (answer == -1)
		{
			printf("프로그램을 종료합니다.");
			exit(0); // 프로그램 바로 종료
		}
		else if (answer == num1 * num2)
		{
			success();
			count++; // 맞힌 횟수 한번 증가. for문 밖에 count 선언과 초기화 해둠/
		}
		else
		{
			fail();
		}
		
	}

	printf("\n\n 5개의 비밀번호 중 %d 개를 맞혔습니다.", count);
	
	return 0;
}


int getRandomNumber(int level)
{
	return rand() % (level * 7) + 1;
}

void showQuestion(int level, int num1, int num2)
{
	printf("\n\n\n######## %d 번 째 비밀번호 ########\n", level);
	printf("\n\t%d X %d 는 ? \n\n", num1, num2);
	printf("#############################################\n");
	printf("\n비밀번호를 입력하세요 (종료 : -1) >> ");
}

void success()
{
	printf("\n >> Good ! 정답입니다. \n");
}

void fail()
{
	printf("\n >> 땡 ! 틀렸습니다. \n");
}

간단한 비밀번호 맞추기 프로젝트이다.

getRandomNumber 함수를 정의하고 반환값은 랜덤으로 받을건데, 파라미터를 i 로 했기 때문에 for 문을 반복하면서

i가 커질 수록 랜덤으로 나오는 수의 범위도 커져서 비밀번호는 어려워진다.

-1을 입력받으면 프로그램을 바로 종료, 답이 맞으면 count 횟수 증가와 sucess 함수를 통해 "Good ! 정답입니다." 출력, 

답이 맞지 않으면 fail 함수를 통해 "땡 ! 틀렸습니다."를 출력한다.

 

getRandomNumber는 전달값과 반환값이 있는 함수로, 파라미터를 입력받고 그 파라미터에 따라 반환값이 달라진다.

showQuestion는 전달값은 있고 반환값이 없는 함수로, 파라미터를 입력받고 그 파라미터에 따라 출력값이 바뀐다.

sucess와 fail은 전달값과 반환값이 없는 함수로, 함수 호출 시 printf만 실행한다.