C언어 – scanf()함수

Programming/C 2016. 1. 31. 07:30

<scanf()함수란?>

 

키보드로부터 데이터를 입력받는 함수이다.

형태)

scanf("%d", &a);

%d입력을 위한 서식문자, &a변수의 주소

변수의 주소 a에다가 사용자가 입력한 서식문자에 맞춰 저장하겠다라는 의미이다.

이론은 여기까지하고 무조건 실습이다!

 

<실습>

#include <stdio.h>     // printf()함수와 scanf()함수는 stdio.h파일 안에 라이브러리로 정의되어 있어서 헤더파일 stdio.h를 반드시 포함 시켜주어야 한다.

int main()

{

   int a;

   printf("What is your tall? : \n");

   scanf("%d", &a);        // printf함수에서 키를 입력하라고 나온다그 곳에 170을 입력했다고 가정하자그럼 170이라는 숫자가%d의 서식형태(정수)에 맞춰서 위에 만들어 놓은 변수 a에 저장된다.

   printf("you are %d cm. good! : \n", a);     // a를 출력하는 것이다.

   return 0;

}


-결과-


 

 

<심화 실습>

printf()함수와 scanf()함수를 배웠으니이 두 함수를 이용해서 재밌는 프로그램을 짜보자.

원의 반지름을 입력 받아서 넓이는 계산하는 프로그램을 만들어보자!

#include <stdio.h>

int main()

{

   double r;

   double pi = 3.14;

   printf("반지름을 입력하세요 : \n");

   scanf("%lf", &r);

   printf("입력하신 반지름은 %lf이며넓이는 %f입니다. \n", r, r*r*pi);

   return 0;

}

 

-결과-



 

 

 

<scanf 함수 사용시 주의할 사항>

 

1. 두개 이상의 값을 입력할 때

프로그램 코드를 짜다가 두 개이상의 문자나 숫자를 나란히 입력한다고 가정해보자.

<실습>




 

여기서 왜 b의 값에는 아무것도 찍히지 않은 것일까분명히 위에는 a b라고 찍었는데....

 

이유는 a를 쓰고, space bar를 눌른 후, b를 썻다이때 space bar의 한칸 띄우는 데이터가 b에 들어갔기 때문이다위에 코드를 보면 scanf에서 %c%c를 붙여사용했다그렇다면 이 문자로 붙여서 ab이렇게 찍으면 아마 제대로 출력이 될 것이다.

 

혹은 밑의 실습처럼 %c %c이렇게 한칸을 띄어서 사용하면 된다.

 

<실습>





 

2. 입력을 각각 한줄에 따로 받을때

하나의 데이터를 입력받고 다음줄에 데이터를 입력받을 때사람들은 누구나 데이터하나 찍고 엔터를 쳐서 다음줄 가서 데이터 하나마저 찍고 엔터를 칠 것이다.

 

이때버퍼라는 개념이 들어가는데사람들이 엔터를 치는 순간 그 엔터라는 데이터가 버퍼라는 임시저장공간에 저장되어 버린다. (모든 데이터가 바로 변수에 저장되는 것이아리고 버퍼라는 임시저장공간에 저장되었다가 저장됨)

 

그렇기때문에 엔터라는 값이 b안에 들어가버리는 것이다.

<실습>

 



 

이렇게 되어버리기 때문에 한 문자의 입력값을 받은 후버퍼값을 지워줘야한다그 명령어는 fflush(stdin);이다.

<실습>





 

posted by 경원구