티스토리 뷰

반응형

개발자의 C언어 독학 기초 # scanf

모든 강의 자료 : www.codingnow.co.kr/

C언의 consol 창의 입력 명령중 흔하게 사용되는 scanf이다.

scanf("%c",&val1);
//    입력형식, 입력받을 변수

이와 같이 사용하면 val1변수에 입력된 값이 저장되서 리턴된다.

 

#include <stdio.h>
#include <windows.h> //system 명령 실행을 위해


void main(void)
{
  system("chcp 65001"); //gcc 한글 깨짐
  system("cls"); //화면지움

  printf("(char을 입력하세요) : ");
  char val1;
  scanf("%c",&val1); // <-------------- scanf!!
  printf("char[%c]", val1);

  printf("\n\n");

  return;
}

출력결과 이다.

어렵지 않게 동작 확인이 가능하다.

사용하다 주의할 점이 있다.

아래 코드와 같이 연속으로 두개 이상의 값을 입력받으려 할때 한개만 입력이 되고 끝나 버리는 경우가 있다.

#include <stdio.h>
#include <windows.h> //system 명령 실행을 위해

void main(void)
{
  system("chcp 65001"); //gcc 한글 깨짐
  system("cls"); //화면지움

  printf("(char을 입력하세요) : ");
  char val1;
  scanf("%c",&val1);
  printf("char[%c]", val1);


  int val2;

  //fflush(stdin); //입력 버퍼지우기
  //while( (val2 != getchar() == '\n' ) ); //입력 버퍼의 enter  지우기

  printf("\n\n(int을 입력하세요) : ");
  scanf("%c",&val2);
  printf("\nbyte[%c]", val2);

  printf("\n\n");

  return;
}

출력 결과이다.

하나만 입력 했는데 종료 되어 버렸다.

원인은 입력 후 enter값이 입력 버퍼에 남아 있어서이다.

아래 코드는 enter값을 입력 버퍼에서 지워주는 코드를 추가한 것이다.

두가지 방식이 있는데 fflush를 사용하거나,

 

fflush(stdin); //입력 버퍼지우기

getchar를 사용하여 지워주면 문제 없이 동작을 한다.

while( (val2 != getchar() == '\n' ) ); //입력 버퍼의 enter  지우기

아래 코드는 fflush를 적용한 것이다.

#include <stdio.h>
#include <windows.h> //system 명령 실행을 위해

void main(void)
{
  system("chcp 65001"); //gcc 한글 깨짐
  system("cls"); //화면지움

  printf("(char을 입력하세요) : ");
  char val1;
  scanf("%c",&val1);
  printf("char[%c]", val1);


  int val2;

  fflush(stdin); //입력 버퍼지우기
  //while( (val2 != getchar() == '\n' ) ); //입력 버퍼의 enter  지우기

  printf("\n\n(int을 입력하세요) : ");
  scanf("%c",&val2);
  printf("\nbyte[%c]", val2);

  printf("\n\n");

  return;
}

출력 값이 정상 문제 없이 나온다.

 

반응형