'get_int'
,'get_string'
등의 함수는 우리가 직접 구현할 필요가 없었던 이유는 과거의 어떤 사람들이 모두 구현해두었기 때문이다.#include <stdio.h>
void cough(void);
int main(void)
{
for (int i = 0; i < 3; i++)
{
cough();
}
}
void cough(int n)
{
for (int i = 0; i < n; i++)
{
printf("cough\n");
}
}
중요한 main 함수가 아래에 있는 것보다 위에 있는것이 보기 좋지만, main 함수를 위로 올리고 cough 함수를 내린다면 오류가 발생한다.
이 것을 해결하려면 다시 cough함수를 위로 올려야한다.
하지만 함수를 1개가 아닌 여러개를 만들수록 main 함수는 아래로 내려가기 때문에
void cough(void);
을 위에 적어 C를 속이는 방법을 사용한다.
지금 cough함수를 정의하진 않았지만 이런 함수가 있다 라고 눈속임을 한후 main 이후 cough함수를 정의해 주어 오류를 해결한다.
다른 예제를 통해 알아본다면
#include <cs50.h>
#include <stdio.h>
int get_positive_int(void);
int main(void)
{
int i = get_positive_int();
printf("%i\n", i);
}
int get_positive_int(void)
{
int n;
do
{
n = get_int("Positive Integer: ");
}
while (n < 1);
return n;
}
여기서 get_positive_int
함수는 CS50라이브러리(cs50.h)에 없는 함수이다.
이 전에 사용했던 get_int
나 get_string
함수처럼 어떤 값을 받아와서 변수에 저장하는 것처럼 이 함수도 어떤 값을 받아 뭔가를 반환하게 할 수 있다.
int get_positive_int(void)
에서 함수 왼쪽에 있는 단어(int)
는 출력의 종류를 의미 하며, 괄호 안의 단어(void)
는 입력의 종류를 뜻한다.
만약 입출력이 없다면 void를 적는다.
그리고 int n;
은 컴퓨터에게 n이라고 하는 변수를 달라는 일종의 힌트이며, 그 안에 어떤 값을 저장할지 아직 모르기 때문에 그냥 int n;만 적는 것이다.
그럼 n은 쓰레기 값(Garbage Value)이라고 부르는 값을 가지게 되며, 나중에 제대로 값을 넣으면 된다.
그 다음 int get_positive_int(void) 함수 안의 do-while
의 루프가 있다.
이 불리언 표현 while(n<1);
이 참일때 다음을 수행하라는 뜻.
만약 n이 1보다 작다면 계속해서 질문을 반복하는 것이다.
while을 단독으로 사용하면 while의 조건이 참이어야만 수행을 하지만, do-while은 do에서 무조건 한 번은 먼저 수행한 후 불리언을 판단한다.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n;
do
{
n = get_int("Size: ");
}
while (n < 1);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("#");
}
printf("\n");
}
}
int n;
으로 정수 값을 갖는 변수 n을 정의한다.do{ …}while()
을 이용해서 while( )의 조건이 만족할때 까지 get_int 함수로 사용자의 입력값을 받아 n에 저장하여 원하는 사이즈의 값을 받는다.for
루프를 두 번 중첩해서 돌면서 “#”(벽돌)을 출력한다.