[C언어] 함수

‎주민영·2021년 8월 23일
0

함수 예시 코드

정수형 변수 x,y를 입력받아 x+y+3.14의 결과값을 돌려주는 함수 abc

  1. scanf 한 개로 여러 개의 문자 입력 받을 경우(단, 문자열이 아닌 단일문자)
    두번째 이상 문자의 형식지정자 앞에 공백 넣기.
  2. scanf를 연속으로 이용해서 여러개의 문자를 입력 받을 경우
    마찬가지로 공백을 넣어주거나, getchar() 함수를 이용해서 문자 사이에 입력되는 엔터나 스페이스를 입력 받는다.
    위 코드에서는 scanf 사이에 printf가 들어가서 별도의 조치없이 두개의 입력값이 구분되었다.
  3. return은 함수 선언시 명시한 출력값의 자료형인 실수형 변수이다.
z변수 대신 그냥 return을 넣었더니 '식이 필요합니다' 라는 경고가 뜬다.
  1. double의 형식지정자는 %lf이지만 scanf함수에서만 유의미. printf에서는 float 형식 지정자인 %f 써도 됨.

미션 3

정수 1을 전달하는 함수,
문자 a를 전달하는 함수,
호출 즉시 무조건 hello를 출력하는 함수,
main()함수로부터 실수를 입력받아서 저장하고 그 값을 즉시 출력하는 함수 만들기.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int func1(void);
char func2(void);
void func3(void);
// double func4(double input); 입력한 값을 전달할 필요 없이 그냥 바로 출력하므로 반환값 없음.
void func4(double x); //리턴값을 다시 main 함수로 보낼필요 없이 main함수에서 입력받은 실수 값을 즉시 출력!
/*
char a;
double input; // 전역변수 선언
*/
main() {
	//함수로부터 전달받아 값을 출력시킬 변수와 메인함수에서 입력받을 값을 저장할 변수를 선언한다.
	int a; 
	char b;
	double c;

	a=func1(); //함수 리턴값을 변수에 저장
	b=func2();
	printf("func1() 함수로 전달받은 값은 %d입니다.\n", a);
	printf("func2() 함수로 전달받은 문자는 %c입니다.\n", b);
	func3(); //함수내의 pirntf 이용할 것이므로 그냥 호출

	//double input; 지역변수 input의 생명주기는 메인함수 영역. func4함수 호출시 전달못함. 
	printf("func4함수로 전달할 실수를 입력하세요 : ");
	scanf("%lf", &c);
	func4(c);//c에 입력받은 값을 함수로 전달
}

int func1(void)
{
	return 1; //주의 반환값은 출력하는 값이 아님. 반환값을 담은 인자를 생성하여 출력해야함.
}
char func2(void)
{
	return 'a'; //문자를 인식하기 위해선 반드시 'a'를 써야함. 따로 선언해야하는 변수a와 다른 것
}
void func3(void)
{
	printf("hello\n");
}
void func4(double x)//c에 입력된 값이 x에 전달, 입력변수의 자료형과 이름은 따로 선언X
{
	printf("main 함수로부터 전달받은 실수 값은 %f입니다", x);
	//return input; 메인함수로 반환 안함.
}
  1. 선언한 함수와 메인함수 뒤의 정의한 함수가 다른 부분 없도록 주의.
  2. 변수를 메인함수 안에 선언할 지, 정적변수로 선언해야할 지가 헷갈렸다. 이 문제에선 한 변수를 반복해서 사용하는것도 아니고, 각 함수에서 메인함수로 전달받은 값을 변수에 저장하여 출력하므로 지역변수를 사용해야한다.
  3. 각 함수에서 전달하는 값이나 문자를 출력하는 방법이 헷갈렸다. 처음에는 출력코드도 작성안하고 함수만 호출했는데, 이는 함수만 동작시키는 거지 동작시킨 결과를 보여주지 못한다. 그래서 함수의 반환값을 저장할 변수를 따로 선언한 뒤 그 변수안에 들어있는 값이나 문자를 출력해야한다.
    단, 정수나 문자를 전달하는 함수(함수 1,2)와 따옴표 안의 내용을 출력하는 함수(함수3)는 차이가 있다. 전자는 반환값이 있는 것이고, 후자는 반환값이 없다.
  4. 함수 4 : 사용자로부터 입력된 c의 값이 함수 4 입력변수 x로 전달되고, 그 x의 값을 출력한다. 함수호출시 쓰인 입력변수와 함수 정의에 쓰여있는 입력 변수는 다른 것이다. 전자는 사용자가 값을 입력할 상자이고, 후자는 어떤 함수의 입력값이 저장될 상자이다. 함수 4의 호출을 통해 c에 입력된 값이 함수의 입력값으로 들어간 것이다.
  5. 함수 4는 호출된 뒤로 함수4의 입력변수에 저장된 값을 출력하면 된다. 메인함수로 돌아갈 필요가 없으므로 반환값이 없다.
  6. 그외 복습
    문자 a를 쓰기 위해선 따옴표 꼭 쓰기. 안쓰면 변수(내용없는 상자)로 인식됨.
    scanf에서는 &변수, printf에서는 그냥 변수이름만! double scanf 형식지정자만 유의하기(&lf)

구글링 기록
문자,문자열 입력받기 https://aeunhi99.tistory.com/39

profile
슬기로운 대학생활

0개의 댓글