[#1] 정수, 변수, 주석으로 '경찰서 조서 쓰는 게임' 만들어보기

 

※ 해당 스터디는 나도코딩의 'C언어 무료 강의'를 기반으로 작성되었습니다.


 

1강에서는 아주 간단히 작동하는 '채팅형 게임'인 '경찰서 조서 쓰기'를 만들면서 C언어에 대해 알아보려고 합니다.

먼저 지난시간에 "Hello, World!"를 실험했었던 파일을 다시 열어주세요.

 

그럼 지난시간에 작업했던 아래의 코드가 나올 겁니다.

#include <stdio.h>
int main() {
	printf("Hello, World! \n");
}

지난시간엔 따로 설명하지 않았는데, 저 <stdio.h>는 studio라는 영어랑은 아무런 상관이 없으니 오해하시면 안됩니다.

stdiostandard input output의 약자일 뿐이란거 꼭 기억해주세요.

 

이제 저 기본적인 틀을 가지고 정수와 변수, 주석에 대해 알아보며 게임까지 만들어 보겠습니다.


 

정수형 변수

 

위의 코드에서 몇가지를 조금 바꾸고 추가할 겁니다.

왜 추가하는지는 지금은 모르셔도 됩니다.

#include <stdio.h>
int main(void)
{
	return 0;
}

이제 위 코드를 베이스로 작업을 해보겠습니다.

 

먼저 변수 "값을 저장하는 이름표"를 뜻합니다. 만들 게임에선 '나이'를 변수로 설정할건데, 나이는 항상 변하기 때문에 변수가 필요하겠죠?

 

그리고 정수는 말 그대로 1, 2 처럼 소숫점이 없는 숫자를 말합니다. 코딩에서도 기본적인 수학적 지식은 필수입니다.

그럼 이제 이 변수와 정수를 활용해 나이를 출력해 보겠습니다.

#include <stdio.h>
int main(void)
{
    int age = 12;
    printf("%d\n", age);
    age = 13;
    printf("%d\n", age);
    return 0;
}

위 코드를 한번 입력해보고 실행(Ctrl+F5)해봅시다.

그럼 아마 이렇게 결과창에 12와 13이 뜰 겁니다.

그럼 이제부터 뭐가 어떻게 된 일인지 하나하나 뜯어봅시다.

 

C에서

int라는 명령어는 정수를 뜻합니다.

printf'뒤에 나오는 내용을 출력하라'는 명령입니다.

%d는 int(정수)를 출력할 때 그 정수 출력을 알려주는 표시입니다. 즉 "여기에 int가 들어올거야"를 알려주는 신호죠.

\n줄바꿈입니다. 매우 자주 쓰게 될 기능이니 꼭 기억해주세요.

 

즉 위의 문장을 해석하자면

 

int age = 12; 나이(age)는 정수(int)이며, 12이다.

printf("%d\n", age); 정수인 12(%d)를, 변수(age)에 출력해라(printf)

 

가 됩니다.

 

만약 제 설명으로도 잘 이해가 안간다면 ChatGPT등 AI에게 물어보세요. 정말 잘 알려줍니다.


 

주석

 

우리가 코드를 입력하다보면, 코드말고도 뭔가 메모를 하거나 참고할만한 문장을 넣고 싶을 때가 있습니다.

하지만 그냥 무작정 넣어버리면, 심지어 한글이 들어가버리면 코드는 당연히 오류가 발생하게 됩니다.

 

이럴 때 쓰는게 '주석' 기능입니다. 주석을 사용하면 그 무엇을 적어놓든 실제 코드 작동에는 아무런 영향을 끼치지 않죠.

그래서 코딩 중간중간에 보조설명을 넣거나 메모를 할 수 있습니다.

또, 일부 작동시키고 싶지 않은 코드들을 주석처리 해 버릴수도 있죠.

 

실제 업무에서도 함께 코드작업을 할 때 이게 왜 이렇게 짜여져 있는지를 주석으로 설명하는건 꽤 중요한 작업입니다.

 

주석의 사용방법은 간단합니다.

주석으로 쓸 문장 앞에 '//'를 넣으면 됩니다.

특정 코드들을 전부 감쌀때는 '/*'로 시작해서 '*/'로 닫으면 그 사이에 있는 모든것이 주석처리 됩니다.

 

위의 코드를 활용해서 주석을 만들어봅시다.

#include <stdio.h>
int main(void)
{
    int age = 12;
    printf("%d\n", age);
    //age = 13;
    printf("%d\n", age);
    return 0;
}

두번째 age = 13;앞에 //을 집어넣었더니 회색처리가 된 걸 볼 수 있습니다.

실제 VS에서도 이 주석을 달아보면 age = 13; 이 진한초록색 글씨가 되는걸 알 수 있습니다(보통 진한초록색이 주석 색상)

/**/를 활용하면 위에서 설명한대로 그 안에 갇힌 모든 코드들은 다 주석처리 됩니다.

age = 13쪽을 모두 주석처리 했더니 디버깅에서도 '12' 하나만 뜨는 것을 확인할 수 있습니다.


 

실수형 변수

 

위에서 배운 내용들은 다 /**/로 묶어서 주석처리하고, 실수형 변수를 배워봅시다.

(앞으로 나올 내용들은 끝날때 지우지 마시고 꼭 /**/로 다 주석처리 해 주세요. 강의에선 예제코드가 길어지는게 좋지 않아서 일부러 삭제할 뿐입니다. 여러분들은 꼭 실습내용을 지우지말고 아래처럼 주석으로 처리해 주세요.)

 

실수란 1.25처럼 소숫점이 포함된 숫자를 뜻합니다.

그럼 실수를 활용해 소숫점이 포함된 숫자를 출력해 봅시다.

#include <stdio.h>
int main(void)
{
    /*int age = 12;
    printf("%d\n", age);
    age = 13;
    printf("%d\n", age);*/
    //이 코드 이후부터 강의에서는 주석처리는 다 지우고 보여드립니다.
    //여러분들은 꼭 지우지말고 위처럼 주석처리 해가면서 진행해주세요.
    
    float f = 90.5f;
    printf("%f\n", f);
    return 0;
}

 

C에서

float라는 명령어는 실수를 뜻합니다.

또한 float를 쓸때는 꼭 소숫점 뒤에 f를 붙여줘야 합니다. (위에서 90.5f 쓴 것을 확인)

%f는 float(실수)를 출력할 때 그 실수 출력을 알려주는 표시입니다. 즉 "여기에 float가 들어올거야"를 알려주는 신호죠.

 

자 그럼 한번 출력해봅시다.

 

근데 어라라 뭔가 이상합니다. 90.5만 출력돼야 할거같은데 90.500000으로 소숫점이 너무 많이 나옵니다.

이럴땐 %f사이에 '.(숫자)'를 입력하면 그 숫자만큼만 소숫점이 표시됩니다.

예를들어 %.2f라고 입력하면 소숫점 2자리까지만 숫자가 표시되겠죠?

 

한번 입력해봅시다.

성공적으로 잘 바뀌는 것을 확인할 수 있습니다.

 

실수형에는 float외에도 double도 있습니다. float까지 모두 주석처리하고 아래처럼 입력해봅시다.

#include <stdio.h>
int main(void)
{
    double d = 4.428;
    printf("%lf\n", d);
    return 0;
}

 

C에서

doube이라는 명령어는 실수를 뜻합니다.

또한 double을 쓸때는 소숫점 뒤에 f를 안붙여도 됩니다.

%lf는 double(실수)을 출력할 때 그 실수 출력을 알려주는 표시입니다. 즉 "여기에 double이 들어올거야"를 알려주는 신호죠.

여기도 마찬가지 소숫점이 여섯자리까지 표시되고 있는데, float과 마찬가지로

%와 lf사이'.(숫자)'를 넣으면 원하는 자리까지만 표시해줍니다. 예시에선 4.428이니 .3까지하면 딱 떨어지겠네요.


 

상수

 

상수는 변수와 달리 변하지 않는 수를 뜻합니다. 한 번 정하면 변하지 않는 값이죠.

예를들면 태어난 년도 같은 것은 정말 특별한 경우가 아닌 이상 변할 일이 없기 때문에 상수가 적합하겠죠.

 

상수는 간단합니다.

int앞쪽에 const만 붙여 주면 됩니다.

const상수를 설정하는 명령어입니다.

#include <stdio.h>
int main(void)
{
    const int YEAR = 2000;
    printf("태어난 년도 : %d\n", YEAR);
    return 0;
}

태어난 년도를 고정적으로 2000으로 설정해봤습니다.

간단하죠??


 

printf

 

앞에서 아주 간단히 설명했던 printf에 대해서 조금만 더 알아봅시다.

#include <stdio.h>
int main(void)
{
    int add = 3 + 7;
    printf("3 + 7 = %d\n", add);
    return 0;
}

 

정수(int)로 3 + 7을 해보겠습니다. 위처럼 변수(add)에 3+7값을 넣고

printf에 저렇게 입력하면 당연히 '3 + 7 = 10'이 나오게 되겠죠?

저렇게 int와 printf를 쓰는 방법도 있지만, printf 하나만 가지고도 저것과 똑같은 결과물을 만들어 낼 수 있습니다.

아래처럼 한번 입력해봅시다.

#include <stdio.h>
int main(void)
{
    printf("%d + %d = %d\n", 3, 7, 3 + 7);
    return 0;
}

 

이는 위와 비슷한 결과를 창출해 냅니다. 설명하자면

첫번째 %d는 뒤의 3을 뜻합니다.

두번째 %d는 뒤의 7을 뜻합니다.

세번째 %d는 뒤의 3 + 7을 뜻합니다.


 

scanf

 

scanf키보드 입력을 받아서 저장하는 기능을 합니다.

일단 아래처럼 코드를 입력해 봅시다.

#include <stdio.h>
int main(void)
{

    int input;
    printf("값을 입력하세요 : ");
    scanf_s("%d", &input);
    printf("입력한 값 : %d\n", input);

    return 0;
}

 

지금까지 잘 따라왔다면 위에서 int가 정수, input이 변수, printf에서 "값을 입력하세요"라는 문구 출력까지는 이해가 가실겁니다.

여기에 scanf_s를 입력하면, 이제 저 "값을 입력하세요"쪽에 키보드 입력을 받아서 저장하는 기능이 생기는 것이죠.

한가지 주의해야 할 점은 scanf_s를 입력할 땐 변수 앞에 '&'를 붙여줘야 한다는 겁니다.

지금 변수이름이 input이니까 &input이라고 하면 되겠죠?

마찬가지 다시 아래서 printf를 해줄건데 이건 scanf가 아니니 그냥 변수값인 input만 입력해줍니다.

 

자 이제 출력을 해보면

이렇게 "값을 입력하세요 : "라는 창이 뜰겁니다. 여기다가 아무숫자나 넣으면

이렇게 "입력한 값"이란 문구가 출력되며 제가 입력한 값이 나오게 되죠.

이게 scanf의 기능입니다.


 

scanf 응용

 

조금 더 응용해봅시다. 이번엔 3개의 정수를 입력해보죠.

#include <stdio.h>
int main(void)
{

    int one, two, three;
    printf("세 개의 정수를 입력하세요 : ");
    scanf_s("%d %d %d", &one, &two, &three);
    printf("첫번째 값 : %d\n", one);
    printf("두번째 값 : %d\n", two);
    printf("세번째 값 : %d\n", three);

    return 0;
}

 

총 세개의 정수를 입력할건데, one, two, three라는 세개의 변수를 넣어줬습니다.

변수가 세개니 scanf_s에도 %d가 세개 들어가고 뒤에 변수선언도 &로 3개를 한게 보이죠?

이제 printf를 총 세개 써서 one, two, three라는 세개의 변수를 다 호출해주면 끝납니다.

 

한 번 실행시켜보죠

아까와 비슷하게 "세 개의 정수를 입력하세요 : "가 뜰텐데 여기 숫자 세개를 아무거나 넣어봅시다.

전 100, 2000, 30000을 넣었습니다. 참고로 숫자 세개를 구분할땐 위처럼 스페이스바로 띄어쓰면 됩니다.

그런 다음 엔터를 누르면?

설계한대로 결과값이 잘 나오는 것을 확인할 수 있습니다.

 

다음 시간에는 문자와 문자열, 그리고 지금까지 배운 내용들을 토대로 '경찰서 조서 쓰기' 게임까지 만들어 보겠습니다.


 

AI피드백

 

오늘 배운 내용을 AI에게 보여줘서 피드백을 받아 봅시다.

지금까지 입력했던 코드들을 전부 복사해서 AI채팅창에 붙여넣기 한 후,

 

"내가 오늘 공부한 내용이야. 오늘 배운 내용들을 정리해줘"

"내가 오늘 공부한 내용이야. 이 내용들을 왜 배워야하고, 또 어디에 쓸 수 있어?"

"내가 오늘 공부한 내용이야. 이 내용들을 응용해서 풀 수 있는 문제를 10개 정도 만들어줘"

 

등 다양한 요구를 해봅시다. 전 아래처럼 물어봤습니다.

여러분이 C를 공부하는 이유에 따라 질문은 천차만별로 달라질 수 있습니다.

AI를 잘 쓰려면 항상 질문을 잘 하는법을 알아야 합니다.

 

이는 제가 매일 제시하는 AI피드백을 보다보면 자연스레 늘어날 겁니다.

저같은 경우 C를 배우는 가장 큰 목적이 '게임'이기 때문에 또 이렇게 질문했습니다.

여러분들도 여러분만의 질문을 해서 효율적으로 공부하고 익히시면 좋겠습니다.