c언어 #3 - 변수, scanf (국비4일차)

 

오늘은 변수를 공부할 예정이다. 

변수를 공부하면 자연스레 자료형도 같이 공부해야하므로 자료형도 알아볼 예정이다.

그리고 변수를 사용해 printf에도 적용시켜볼 것이다.

1. 변수
2. 자료형
3. scanf

 

 

1. 변수

 c언어에서 변수는 6가지의 종류가 있다. 

변수란 프로그램을 작성할 때 숫자나 문자, 문자열과 같은 데이터를 임시로 저장하는 공간으로

쉽게 설명하자면 그릇이라고 생각하면 된다. 

물을 담으려면 물컵이 알맞은 그릇이듯 각각의 그릇에는 어울리는 데이터가 있다.

 

정리하자면,

변수 : Data를 저장하는 메모리(RAM) 공간
그릇의(변수) 종류 - Data Type : 자료형 
C언어 : 6종류
C++ : 7종류
Java : 8종류

 

 

▶C언어의 변수의 종류
(밑으로 갈수록 변수의 사이즈가 커짐, 빨간색은 많이 쓰이는 변수의 종류)

char(character, 한 문자
short(정수
int(integer, 정수
long(정수
float(실수
double(실수) 

여기서 의문점이 생긴다. Data의 종류는 4가지이다.

그러나 변수에는 Data의 한 종류인 string을 담는 그릇이 없다.

그렇다면 어떻게 문자열을 담지?

그것은 배열을 공부할 때 다뤄보겠다.

 

  • 그릇(변수)을 만드는 문법

  그릇종류 라벨지; → 자료형 변수명;
ex) int a;
      float b;

변수선언

 

그럼 이제 변수명을 정하는 규칙에 대해서 알아보자.
(개발자는 협업을 하고, 많은 변수를 만들기때문에 규칙이 필요함)

 

변수명 명명 규칙
1. 영문자 - 대소문자 구별
2. 숫자 - 첫글자x
3. 특수문자 - 오로지 _(언더바)만 가능
(띄어쓰기도 문자다. 변수에선 사용하면 안된다. 그래서 언더바를 이용한다.)

변수명 명명 권고사항
▶유의미한 명칭을 사용할 것(네이밍 컨벤션)
(우리가 어떤 변수인지 기억하고 알아야하기때문)
소문자로 쓰기
▶두번째 단어의 첫글자는 대문자로(카멜표기법)
ex) userEmail, userEmailAddress

 

 

그럼 이제 변수에 데이터를 넣어보자.변수에 데이터를 넣을 때 필요한 것은 '대입 연산자'이다.바로 '='이다.그러나 수학에서 =(equals)과는 다른 개념이다.프로그래밍에서 equals는 '=='이다.꼭 구별해서 기억해두자.그렇기 때문에a  = 10;

10 = a;
는 다르다! (오른쪽을 왼쪽으로 대입하기 때문)

 

변수에 데이터 대입하기

이렇게 변수를 선언하고, 해당 그릇에 맞는 데이터를 넣을 수 있다.

 

이런방식으로 변수에 저장된 값을 출력할 수 있다.

 

그럼 '변수'라는 이름의 뜻처럼

변수의 값을 변경해보자.

변수의 값 변경하기

 

여기서 변수의 값을 변경했는데 왜 위에 a는 10으로 나오는지 의문이 드는 사람이 많을 것이다.

컴퓨터는 위에서 아래대로 차례대로 출력한다.!!!!! 기억하자!!!

이런 방식으로 다른 자료형의 데이터를 이용해 변수를 사용할 수 있다.

 

또 하나 기억해야할 것은 
변수 이름이 같으면 에러가 난다! 그러니 다른 이름을 부여해야한다. 
또 변수를 만들고나선 반드시 변수에 데이터 값을 넣어줘야한다.(그렇지 않으면 에러가 발생)

 

변수선언 방법

변수를 만들때마다
int a;
a=10;

이런 방식으로 선언하면 무수히 많은 줄이 만들어질 것이다.

좀 더 간단하게 표현하는 방법이 위의 사진에서 보이듯
변수를 만들면서 초기화하는 것이다.

즉.
int a = 10;
이렇게 선언을 하는 것이다.

변수는 이렇게 다양하게 선언이 가능하다.(한번에 같은 타입을 여러개 선언도 가능)
(m,n 밑에 나타난 점 표시는 값을 넣어주지 않았다는 표시이다.)

 


2. 자료형

 

CPU는 RAM에게 명령을 내릴 때 16진수를 이용한다. 그래서 RAM 주소가 1,2,3,4,5,6,7,8,9,a,b,c... 

이런 형태로 있다고 한다.

 

RAM 구조는 엄청나게 많은 사물함이 있는 것이라고 생각하면 이해하기 쉽다.

32bit라면 그 사물함이 약 42억개가 있고..

64bit라면 사물함이 약 120경(?)개가 있다고 한다. ㅎㄷㄷ

이때 이 사물함 하나는 1bit를 차지하며, 1bit는 너무 작아 데이터를 관리하기 어려워서

8bit = 1byte 씩 묶어서 관리한다.

 

 

이렇게 했을 때,

1칸 즉 8bit를 이용하면
최대 0~255까지만 사용이 가능하다.

그러나 255까지만 가능한 것은 너무 적지 않은가?

그래서 c언어를 만든 사람은 변수별로 
차지하는 byte의 크기를 다르게 설정하였다.

 

char - 1byte
(아스키코드를 사용하기때문에)
short - 2byte
int - 4byte
long - 4byte
float - 4byte
(소수점 밑으로 6자리까지 표현 가능)
double - 8byte
(소수점 밑으로 15자리까지 표현 가능)

 

그렇다면 진짜 그런지 한번 확인해보자.

 

 


3. scanf

 

scanf는 키보드를 통해 사용자의 값을 입력받는 명령어이다.

이걸 비중있게 많이 안다루는 이유는 실무에서 사용하지 않기때문이다.

왜?

여러분들은 앱에서 저렇게 검은 화면에 키보드로 입력을 하나?

아니기때문이다.

 

 

scanf_s

scanf가 위험한 함수라 scanf_s를 써야한다.
왜 위험하냐 이유를 말하자면 너무 길어지니 패스하겠다.

 

이렇게 scanf_s를 사용하면 커서가 깜빡깜빡한다.

우리가 지금껏 봐왔던 화면은
프로그램의 위치 정보와 함께
'이 창을 닫으려면 아무 키나 누르세요.'
라고 나온다.

하지만 나오지 않는다는 것은

제대로 명령을 하였다는 것이다.

scanf는 말그대로 printf와 반대로 키보드를 통해 값을 입력받는 것이다.

따라서 저 화면에 값을 입력하면 

이렇게 나온다.

이를 이용해 결과값까지 출력하려면

이렇게 작성하면 된다.

 

scanf를 다양한 변수로 이용할 때 문제가 생기는 것은 char을 사용할 때이다.

왜냐하면 이미 앞에 다른 scanf를 사용했을 때 우리는 자연스레 값을 입력하고

엔터를 누를 것이다. 

하지만 엔터 역시 아스키코드에 들어가있는 것이여서

엔터가 입력이 되어버리는 것이다. 따라서 내가 원하는 값을 입력할 수 없어진다.

 

우리가 scanf를 많이 사용하는 것이 아니기때문에

앞으로 연습할때 char 변수를 입력받을 땐

그 앞에 다른 scanf를 하지 않도록 한다.

 

 

그럼 응용을 한번 해보자.

 

덧셈 계산기 만들기

이렇게 코딩을 하면 우리가 아는 계산기 덧셈을 할 수 있게 되는 것이다.

 

구구단을 보여주는 프로그램

 

 

이렇게 scanf 명령 한번에 여러개의 변수값을 입력도 받을 수 있다.

입력시 하나 쓰고 엔터 그리고 하나 써도되고

하나쓰고 띄어쓰고 하나써도 된다.