본문 바로가기

Code.D IT 강좌/C언어

[C언어 강좌] scanf 함수/fflush 함수

C언어 강좌

scanf 함수

데이터를 입력받는 기능을 가진 함수입니다.

printf()는 데이터를 출력하는 함수지만, scanf()는 데이터를 입력받는 함수인 셈이죠.



scanf 함수의 기본 구조

scanf("서식 문자" &변수);

Ex) scanf("%d", &a);



fflush 함수

C언어로 프로그래밍을 하다 보면 입출력 버퍼에 데이터가 남게 되어 정상적인 입출력을 하지 못하는 경우가 생깁니다. 이런 문제는 보통 scanf 함수를 사용하면서 데이터를 입력받는 경우에 발생합니다. 이를 해결하기 위해서는 데이터가 남아있는 버퍼를 비워줘야 합니다. 이때 많이 사용하는 함수가 fflush 함수입니다. 참고로 fflush 함수가 버퍼를 비운다는 뜻은 버퍼에 남아있는 데이터를 완전히 지운다는 뜻이 아닙니다.

버퍼에 남아있는 데이터를 출력하고자 하는 목적지로 전송한다는 뜻이죠.



참고

버퍼란?

데이터를 임시로 저장하는 기억장치입니다.



예제를 보면 이해하기가 더욱 수월하실 겁니다.



     
     #include <stdio.h>

      int main(void){

//   int a;
//   int b;
//   int c;

     //위의 코드와 동일
     int a, b, c; 

     printf("10진수 정수 1개를 입력해 주세요 >> ");
     fflush(stdout);
     scanf("%d", &a);
     printf("10진수 : %d, 16진수 : %x, 8진수 : %o\n", a, a, a);

     printf("16진수 정수 1개를 입력해 주세요 >> ");
     fflush(stdout);
     scanf("%x", &b);
     printf("10진수 : %d, 16진수 : %x, 8진수 : %o\n", b, b, b);

     printf("8진수 정수 1개를 입력해 주세요 >> ");
     fflush(stdout);
     scanf("%o", &c);
     printf("10진수 : %d, 16진수 : %x, 8진수 : %o", c, c, c);

     return 0;
}



다음은 코드 출력 화면입니다.






10진수 정수 10을 입력합니다.






16진수 정수 10을 입력합니다.






8진수 정수 16을 입력합니다.






다음 사진은 10진수 값에 따른 8진수와 16진수의 값입니다.






int a, b, c;

--> 변수 a, b, c를 선언합니다.

fflush(stdout);

--> 버퍼를 비워줍니다.

scanf("%d", &a);

--> 10진수(%d)를 입력받아 변수 a에 저장합니다.

scanf("%x", &b);

--> 16진수(%x)를 입력받아 변수 b에 저장합니다.

scanf("%o", &c);

--> 8진수(%o)를 입력받아 변수 c에 저장합니다.