반응형

안녕하세요. C언어 오랜만의 포스팅입니다. 

 

본가에 돌아가긴 했었지만 좀 바빠서 포스팅을 못했었는데요.

 

포스팅을 안한지 오래됐더니 순번에서 밀렸나... 블로그가 죽어가고 있더라구요

 

내가 어떻게 살린 블로그인데... ㅠㅠ

 

가만히 두고볼수도 없는 일이고 그래서 이번에는 책은 없지만 입력기능에 관해 간단히 알아보고

 

그것을 이용하여 프로그램을 만들어 볼 계획입니다.

 

누구나 쉽게 C언어에 다가기 위한 목적으로 하는 포스팅인만큼 '전문 용어'를 최대한 배제시켜서

 

작성하도록 하겠습니다.

 

------------------------------------------------------------------------------------------

 

여러분은 이전까지 프로그램을 제작해왔습니다.

 

단순히 출력을 하는 프로그램과 '변수'를 지정하여 출력을 시켜주는 프로그램 제작 입니다.

 

그렇지만 굉장히 심심하지 않으신가요?

 

프로그램이라는건 역시 키보드로 내가 원하는 걸 입력해서 엔터를 딱 치면 원하는 결과값이 나오는

 

그 맛 아닌가요?

 

그래서 이번에는 어쩌면 C언어의 재미를 높일수 있는 입력기능을 이용하여 프로그램을 제작해보도록

 

하겠습니다.

 

우리가 만들 프로그램은 이것입니다!

 

 

 

뭔가 기대가 되지 않나요?

 

이렇게 무언가를 입력 함으로써 원하는 결과값을 얻을수 있는 방법에 대해 알아 보고자 합니다.

 

출력만 하다가 갑자기 내 손으로 입력을 해야 하는 과정을 만들어 줘야 하니 많이 번거로울것 같나요?

 

걱정하지 마세요. 생각보다 코드는 굉장히 간단합니다.

 

그 코드 아래에 공개를 하겠습니다

 

 

생각보다 많이 간단하죠?

 

개념 자체는 그렇게 새로운 것이 많이 없습니다만 역시 코드 해석을 한번 해야 할것 같습니다.

 

 

1. 입출력 프로그램의 코드를 분석 해보자.

 

 

여러분은 이전에 printf의 개념을 배우셨고 변수를 이용한 프로그램 제작도 해보았습니다.

 

처음듣는 내용이고 잘 모르겠다구요? 저런... 그렇다면 이걸 말고 제가 썼던 이전의 글을

 

한번씩 차근히 읽어보시고 오시기 바랍니다.

 

코드 자체는 생소하지 않습니다.

 

무언가 내용이 많아진것 같지만 결국에는 printf가 많이 쓰인것 뿐입니다.

 

printf는 여러분들에게 충분한 설명을 하였습니다. 출력 하는데 필수 함수라고 하였습니다.

 

그럼 입력을 담당하는 코드는 어디있을까요?

 

코드를 보시면 생소한 함수가 하나 있는것을 보실수 있습니다.

 

scanf 라는 함수인데요.

 

scan이라는 말은 무슨 의미인가요? 우리가 흔히 쓰는 스캐너(Scanner)와 유사한 의미입니다.

 

scan이라는 의미 자체가 훑어보다, 조사하다 뭐 이런 뜻이 있지만요.

 

컴퓨터 용어에서는 Scan이라는 의미는 컴퓨터에 데이터를 넣는 걸로 대충 보시면 되요.

 

즉 scanf는 (Scan Fuction)의 줄임말로써 함수를 스캔한다고 보시면 됩니다.

 

printf의 말 의미도 아시겠나요? printf는 Print Fuction으로 함수를 출력한다는 의미가 되죠.

 

이렇듯 함수의 이름도 대충 지어진것이 아닌 의미가 있습니다.

 

입력을 하는데에 scanf라는 함수만 쓰인다고 장담을 할수 없습니다만

 

적어도 키보드로 데이터를 입력하는데는 scanf가 굉장히 많이 쓰입니다.

 

int a,b 를 통해서 a와 b라는 변수를 선언했구요.

 

printf를 통해 "두수를 입력하시오 : "라는 문구까지 썼습니다.

 

그 말 바로 뒤에 커서가 깜빡이게 되는데 원래는 여기서 끝이지만 scanf 함수를 바로 다음줄에

 

이어서 작성하게 되면 입력까지 할수 있는 기능이 추가가 되는 겁니다.

 

scanf("%d %d",&a,&b) 라는 의미는

 

첫번째로 입력하는 숫자는 변수 a에 담으라는 뜻이고 두번째로 입력하는 숫자는 변수 b에 담으라는 뜻입니다.

 

그런데 왜 %d가 쓰였을까요?

 

제가 썼던 글 04.변수를 이용한~ 의 글을 보시면

 

형식 제어 문자열이 있는데 거기서 %d는 무조건 정수만을 받을수 있습니다.

 

그래서 숫자입니다. 그럼 만약에 정수가 아닌 다른 값 예를 들어 문자를 입력하면 어떻게 될까요?

 

그럼 알수 없는 이상한 값을 컴퓨터는 출력하게 되는데 이것을 우리는 '쓰레기 값' 이라 부릅니다.

 

이 쓰레기 값에 관한 중요한 말이자 명언이 있는데

 

GIGO 라고 (Garbage In, Garbage Out)이라는 말인데 쓰레기 값을 넣으면 쓰레기값이 나온다.

 

라는 말입니다.

 

너무나 당연한 말이지만 컴퓨터가 융통성이 정말 없다는걸 잘 보여주는 말이기도 합니다.

 

쓰레기 값 넣으면 쓰레기 값 밖에 나오지 않습니다.

 

우리는 %d를 이용해서 숫자를 입력하기로 약속해놨는데 거기에 문자를 넣으려 했으니

 

컴퓨터 입장에서 문자는 단지 하나의 '쓰레기 값'일 뿐입니다. 그러니 형식제어 문자열

 

잘 지켜서 입력해주시길 바랍니다.

 

이러면 이번에 설명해야 할 내용은 끝이 났습니다.

 

더이상 새로운 것이 없습니다.

 

우리는 scanf 함수를 이용해서 &a, &b 를 넣어줌으로써 변수 a와 b에 숫자(데이터)를 넣어

줬구요.

 

그 a와 b를 받은 컴퓨터는 다음 printf 여러줄에서 시키는 명령을 수행 하는 겁니다.

 

예를 들어 a에 30 이라는 숫자 b에 50이라는 숫자를 받았습니다.

 

그래서 컴퓨터는 메모리 한공간에 a=30, b=50 이라는 값을 저장해놓고 있었는데요.

 

printf("덧셈 결과는 : %d \n",a+b); <ㅡ 이 명령어를 통해 a와 b를 더한 값을 출력을 시켰습니다.

 

그래서 덧셈 결과값이 80이 나오게 되는 거고 위의 gif 스샷 결과대로 나오는 겁니다.

 

%d는 형식제어문자열 \n는 출력 글자를 다음줄로 넘기는 기능인거는 저번 시간에 알려드렸습니다.

 

이것을 이용해서 a-b, a*b , a%b, a/b 등등 여러 산술 연산을 수행하였고

 

우리는 순식간에 사칙연산 계산기를 만들어 낸 것입니다!

 

이것으로 코드 해석은 끝이 납니다.

 

간단히 정리 하자면

 

1) scanf 함수를 이용하여 입력 기능을 수행 할수 있다


2) 변수를 지정하고 scanf 함수내에 &a,&b와 같이 지정해준다


3) 뒤에 그 저장받은 값을 이용한 연산을 출력 시키기 위한 printf 구문을 작성한다

 

이렇게 됩니다.

 

당연한 말이지만 변수와  scanf 안의 지정변수는 똑같아야 한다는건 알겠죠?

 

변수가 a,b로 지정했는데 scanf 안에서는 &c,&d 같이 다른 변수를 지정하면 오류 납니다.

 

 

2. 입출력 기능을 하는 프로그램 코드 내의 숨겨진 C언어 규칙 

 

코드를 다시 한번 잘 보시면 scanf 함수에서 %d와 %d 사이에 스페이스바 한칸 띄운것을 보실수 있습니다.

 

왜 굳이 번거롭게 이렇게 했을까요?

 

사실 안 띄워도 됩니다만 보기 좋게 만들기 위한 목적도 있습니다.

 

위의 gif 파일을 보면 저는 30을 쓰고 띄운다음 50을 썼습니다.

 

이제 감이 오시나요? %d와 %d 사이에 스페이스바를 띄워놨으니

 

입력값도 숫자 띄우고 숫자를 입력해야 하는겁니다.

 

그렇다면 %d%d 처럼 붙여놓으면 어떻게 될까요?

 

3050 이렇게 써야 하는데 컴퓨터가 구분을 할까요? 누누히 말했지만 컴퓨터는 굉장히 멍청합니다.

 

당연히 이걸 구분해줄리가 없습니다.

 

그래서 30을 쓰고 바로 엔터를 친다음 50을 입력해야 합니다.

 

 

이렇게 결과가 나오는데 이게 보기가 좋나요? 취향 차이겠지만 열에 아홉은 이게 보기가 안좋다고

할겁니다.

 

코딩을 잘 해서 원하는 프로그램을 뚝딱 만드는 것도 중요하지만 보기 좋게 만드는 기술도 필요합니다.

 

여러분들이라도 당연히 보기 좋은 프로그램을 쓰고 싶지 않겠나요?

 

이런 세심한 주의도 기울여주시면 좋을것 같습니다.

 

 

 

이것으로 입출력을 이용한 프로그램 제작 과정을 모두 마쳐보도록 하겠습니다.

 

코드 내용은 좀 길었지만 사실 새로운 내용이 scanf 말고는 없어서 설명할것이 없었던게 사실입니다.

 

이렇듯 점점 배워나가면 써먹었던것에 살을 붙이는 형식이다 보니 익히는데 속도가 붙으리라

 

생각이 드네요.

 

혹시나 애매하거나 모르는 내용이 있으면 덧글로 달아주세요. 확인 후 답변 하도록 하겠습니다.

 

 

다음 시간에는 뭘 해야 할지 고민입니다. 실습을 이만큼 했으니 이제 이론을 해볼까 합니다.


제가 중간중간에 약간 야매(?) 형식으로 C언어 규칙들을 알려주었습니다만 이렇게 하면


수박 겉핥기 식이기도 하고... 산술기호나 형식등등을 해볼까 합니다.

 

그 뒤에는 C언어를 포함한 모든 프로그래밍 언어의 꽃이라 불리는 반복문에 대해 이야기를

해보도록 하겠습니다.

 

그럼 다음시간에 뵙도록 하겠습니다, 끝!


+ Recent posts