ZER0 D0G의 잡동사니 블로그
4. 입력, 컴퓨터와 대화하기 그리고 주소에 대하여.. 본문
여러분들은 분명 프로그램을 키면 뭐든 입력해서 사용할것이다.
실제로 input이 없는 프로그램을 찾는게 훨씬 빠를것이다.
자 그럼 명색이 프로그램인데 입력정도는 해서 컴퓨터와 대화를 나누어야 하지 않겠는가?
시작해보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <stdio.h>
int main()
{
//변수 정의 영역
int input = 0;
//입력
printf("input your value :");
scanf("%d", &input);
//출력
printf("%d", input);
//종료
return 0;
}
|
cs |
를 입력해봐라
("직접 입력"하라는것을 강조하는 이유는 그냥 복사 붙여넣기 할때와는 다르게 정말 잘외워지기 때문이다.)
그럼 아마
이렇게 나올것이다.
여기서 정수 12 를 입력해보자
와! 12! 참고로 정말 대단합니다.
우리가 입력한 숫자가 그대로 나왔다!
이제 코드를 뜯어먹고 씹어먹어보자
먼저 input이라는 변수를 정의 했다.
그후 input your value라고 하고 scanf 함수를 통해 입력을 받았다.
?
1. scanf
scanf가 뭔데 입력을 받는 걸까?
간단히 말해서 scanf는 입력을 받는 함수다.
데이터 소스인 키보드에서 입력을 받아 그걸 텍스트 스트림에 저장한뒤 변수에 저장하는 구조이다.
scanf의 사용법은 printf와 매우 비슷한데
scanf("%d", &input);
%d는 저번 강좌에 나왔던것 처럼 정수형을 처리한다는 서식문자이다.
&input은 printf와는 달리 변수명 앞에 &가 붙어있는데 이를 이해 하기 위해 우린 주소에 대해 배울것이다.
2. 주소
변수파트를 공부하며 느낀 이상한점은 없는가? 분명 변수를 저장하긴 했는데 이를 프로그램이
어디에 어떻게 저장했는지 알고 찾아가 우리가 저장한 변수의 값을 읽어온걸까?
먼저 변수는 우리 컴퓨터의 램[RAM]이라고 하는 장치에 저장이 된다.
간단히 편지를 예로 들어보자 저번 시간에 변수는 하나의 방이라고 생각하면 편하다고 말했었다.
하나의 방에는 하나의 주소가 있을것이다.
*실제로 정수형 변수는 4바이트를 사용하며 하나의 방이 아닌 4개의 방이 사용된다.
그냥 편의를 위해 하나의 방이라고 묶어 말한것.
프로그램상에서의 주소값은 8자리수의 HEX(16진수) 값으로 저장되게 된다.
0x12345678이라는 주소를 가진 변수 input이 있다고 치자 그럼 printf, scanf와 같은 함수에서 주소값을 받아 들이고
해당 주소에 있는 편지를 받아와 우리에게 건네주는것이다.
3. 작동
&이건 어떤 변수의 주소를 가리키는 역할을 한다.
뭔 말인지 모르겠다고?
1
2
3
4
5
6
|
#include <stdio.h>
int main()
{
int a = 12;
printf("%p", &a);
}
|
cs |
라고 치고 실행 해본다면 결과는 12가 뜨.... 지 않는다.
0x123DA678과 같은 HEX값이 뜰것이다.
그렇다 &는 말그대로 변수에 담긴 데이터를 읽어 오는것이 아닌 변수자체의 주소를 긁어 오는 역할을 한다.
scanf("%d", &input); 이라고 하면 input에 해당하는 주소에 정수형 데이터를 저장하겠다는 뜻이 된다.
끝.
문제 1. 13을 입력 받아 출력하는 프로그램을 만들어 보아라
문제 2. 두개의 변수에 각각 값을 넣으면 더하기가 되는 프로그램을 만들어 보아라
까지!
'강좌 > c언어 강좌' 카테고리의 다른 글
5. 만약... 만약에..., 제어.... 제어를 해보자 (2) | 2021.01.10 |
---|---|
3. 변수, 변하는 수 그리고 서식문자. (0) | 2020.12.24 |
2.Hello, world! (0) | 2020.12.23 |
1. dev c++ 설치, 위대한 여정의 시작 (0) | 2020.12.23 |