brunch

You can make anything
by writing

C.S.Lewis

by 시몬 Apr 05. 2021

취미로 C++ 공부하기 - 1

변수와 상수, 문자열과 문자, 정수와 실수, printf와 scanf_s

이 글은 유튜브 나도코딩님의 C언어 무료강의 를 보고 학습한 내용을 정리하였습니다.


부제목만 보면 수학시간인 줄 알겠다.

오늘부터 C언어 기초를 학습하기로 했다. 계속해서 생각만 하고있었던 프로그래밍과, 내가 가장 재밌어하는 게임을 개발할 수 있는 언어를 찾다보니 모든 프로그래밍의 기초가 되는 C언어부터 공부해야겠다는 생각이 들어 유튜브를 찾아본 결과 나도코딩님의 C언어 무료강의를 찾게되어 공부한 내용을 정리하려고 한다.




먼저 새 항목 추가에서 C++ 파일을 선택한 후, 적절한 이름을 입력해 확장자를 .cpp가 아닌 .c로 변경하여 생성한다. 지금은 아무것도 모르는 상태이니 하라는대로 하고있지만 .cpp를 그대로 사용하지 않는 이유가 뭔지 궁금한 상황


프로그래밍의 가장 기초, 찍먹만 해보신 분들은 다들 알고 계시는 

#include <stdio.h> 

int main (void) {


를 입력한 후, 

이번시간에는 정수형과 실수형, 변수와 상수, prinf와 scanf_s에 대해 공부했다.


변수와 상수


변수란, 여기서는 이렇게, 저기서는 저렇게의 느낌으로(...) 때에 따라 변수 안의 값을 변경할 수 있는 것을 말하며(int, double, float, char 등), 상수는 말 그대로 언제든지 변하지 않는 값을 말한다(const)

const의 유무로 인해 변수 YEAR에 밑줄이 쳐지는지, 쳐지지 않는지를 확인하면 된다.


정수와 실수형 변수 선언


정수형 변수 int

기초 수학에 따르면, 정수는 소수점이 없는 -1, 0, 2, 4124, 51935과 같은 수들을 말한다.

이러한 개념과 동일하게 정수형 변수에는 소수점이 포함된 수가 들어가지 못한다.

age라는 변수를 정수형(int)라고 선언하고, 선언된 age 안에 12라는 숫자를 정의한다. 후에 printf와 %d를 통해 age라는 변수를 불러올 수 있는데, age 안에는 12가 들어있다. 후에 변수 안에 13이라는 숫자로 재정의할 경우 최종적으로 age 안에는 13의 숫자가 들어있게 된다.


실수형 변수 float과 double

기초 수학에 따르면, 실수는 소수점을 포함한 -1.2135, 12.234, 2315.534 과 같은 정수보다 넓은 개념의 숫자들을 지칭하는 단어이며, 정수는 실수에 포함되지만 실수는 정수에 포함되지 않는다.

float f로 f라는 실수형 변수를 선언, 해당 변수 안에 46.5라는 소수점이 포함된 실수를 정의한다. 

똑같이 double d = 4.428;이라는 변수를 선언한다.

이때 출력시에는 float는 f, double은 lf로 출력해야만 한다.


출력하게 된다면 46.500000, 4.42800000 과 같이 0이 여러개 나오게 될텐데, 

이는 %.1f나 %.2lf를 통해 해결할 수 있다. (소수점 첫째자리까지 출력, 둘째자리까지 출력)


double과 float 둘 다 똑같은 실수형 변수지만, 그때그때 상황의 메모리 소모량을 고려해 적절히 활용할 줄 알아야 된다고 한다. 조금 더 자세히 알고싶지만 처음부터 너무 방대하면 의욕을 잃을 것 같아 포기.


printf와 scanf_s


printf의 연산처리기능

먼저 printf는 연산처리가 가능하다.

1. add라는 정수형 변수에 3 + 7 을 입력할 경우 10의 값이 출력된다.

2. %d를 통해 정수형 변수를 앞에서 선언하지 않을 수도 있는데, printf("%d + %d = %d\n", 3, 7, 3+7);로 정의할 경우 각각 순서대로 %d에 3을, %d에 7을, %d에 3+7을 선언하고 바로 출력하게된다.

3. 곱셈의 경우 * 표시를 통해 처리할 수 있으며, 2번을 응용해 30, 70, 30*70을 선언해 30 * 70 = 2100이라는 출력값을 갖게 된다.


scanf_s의 입력기능

printf가 출력이라면, scanf_s는 입력의 기능을 가지고있다.

자동완성을 보니 _s가 없는 그냥 scanf도 있던데, 강의에서는 scanf_s를 입력하였으니 그냥 따라해보기로 했다. 왜 그랬는지는 모른다.

먼저 input이라는 정수형 변수를 선언한 후, scanf_s("%d", &input); 을 통해 input 안의 값을 입력받도록 하자. 여기서 정수형 변수는 scanf_s시 변수 앞에 & 표시가 필수로 달린다고 한다. 각각의 변수 종류마다의 & 표시가 필요한지, 필요하지 않은지 여부는 마지막에 추가해두도록 하겠다.


후에 입력받은 값을 printf를 통해 출력할 경우 다음과 같은 결과가 나온다.

1. printf를 통해 입력한 값을 입력하세요 : 까지가 먼저 출력되고,

2. 사용자가 필요한 값을 입력할 경우

3. 입력받은 값을 토대로 입력값 : n의 값이 출력된다.


scanf_s의 입력 응용편

먼저 int one, two, three로 세개의 변수를 선언한 후, printf를 통해 세개의 값 입력을 요구한다.

scanf_s("%d, %d, %d", &one, &two, &three);를 통해 세개의 값을 입력해야하는데 여기서 %d, %d, %d 처럼 입력값 사이사이의 문자를 ", "로 입력해야만 쓰레기값(-238651953135)이 출력되지 않는다.

이때 printf를 통해 값들을 순차적으로 출력할 경우 다음과 같은 결과가 나온다.


문자와 문자열을 입력, 출력해보자

문자와 문자열이 있는데, 문자는 말 그대로 한 글자이고 문자열은 한 글자의 배열이라고 한다. 배열은 과거에 개발자분들과 일할 때 어깨너머로 들은 개념이 있었는데, 이번 강의에서는 나중에 알려주신다고 하시니 일단 그러려니하고 따라했다.


여기서 또 헷갈리는 부분이 두가지가 있는데

1. 문자열에 대한 값을 입력받을 때 scanf_s에서의 변수 호출에서는 & 표시가 필요 없다고 한다.

2. 문자열에 대해서 입력받을 때에는 변수명을 호출한 후에 sizeof(변수명)을 입력해주어야 한다고 한다.


어쨋든 상단의 이미지와 같이 정의할 경우 문자의 출력값은 A, 문자열에 출력값은 입력한 값이 출력된다.


문자와 문자열까지 공부했으니 정리해보고 프로젝트 편으로 넘어가도록 하자


1. char는 문자, char 변수명[n]은 문자열 / 출력(printf)시에는 %s를 활용하며 / 입력시에는 & 표시 X

2. int는 정수 / 출력 시에는 %d를 활용하며 / 입력시에는 &표시 O

3. double과 float은 실수 / 출력시에는 %lf와 %f를 활용하며 / 입력시에는 & 표시 O

4. 앞에 const를 붙힐 경우 변수가 아닌 상수로 처리되어 뒷단에서도 해당 값을 변경할 수 없음



경찰서 조서 작성

오늘 배운 것을 토대로 프로젝트를 진행했다. 

경찰서 조서를 작성하는 프로젝트였는데 모든 변수들을 활용해 작성하게 되었다.

내용은 크게 어렵지 않았던 것 같다.

말 그대로 경찰서 조서를 작성하는 프로젝트,

1. char 문자열을 통해 이름을 수집 

    (%s, name, sizeof)

2. int 정수형을 통해 나이 수집 

    (%d, &age)

3. float 실수형을 통해 몸무게 수집

    (%f, &weight)

4. double 실수형을 통해 키 수집

    (%lf, &height)

6. char 문자열을 통해 범죄내용 수집

    (%s, criminal, sizeof)

7. 수집한 내용을 토대로 정보 출력














총 6시간 46분의 영상으로 9개의 토이프로젝트를 진행하는 영상 중 오늘 첫 발을 내딛었다.

하루에 한개씩 진행하며 진행내용들을 정리하여 포스팅하려고 한다. 화이팅!


잘 모르겠거나 궁금증이 생기는 부분은 빨갛게 처리했는데, 이에 대해 답변주실 수 있으신 분들은 댓글로 답변주시면 감사드리겠습니다. 또한 틀린 부분도 지적해주시면 감사드리겠습니다!












작가의 이전글 개발사를 거쳐서 디자인을 깨우쳤다
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari