본문 바로가기

알고리즘

scanf 의 문제점

컴퓨터는 입력을 받을 때 버퍼라는 것을 이용해서 입력의 처리를 효율적으로 하고 있습니다.

abcd를 입력할때 a따로 b따로 c따로 입력되는것이 아니라 , abcd 를 stdin에 저장하고 마지막으로 개행문제가 입력되면

이 stdin(버퍼)에서 꺼내서 처리합니다.

 

그런데 scanf 는  개행문자가 나오기 직전까지 버퍼에서 읽어드린후  버퍼에서 삭제시켜 버립니다.

 

다음과 같은상황에 문제가 생길 수 있어요

scanf("%d", &num);    stdin(버퍼(입력스트림)) 에  123\n이 들어가 있음

 이게 끝나고 나면 stdin 에 123은 삭제되고 \n만 남음

scanf("%c", &charictar);  // 남은 \n 때문에 여기에 입력을 치기도 전에 \n이 들어가게됨

 

[두번째예시]

  printf("문자열을 입력하세요 : ");
  scanf("%s", str1);   // hello world
  printf("입력한 문자열 : %s \n", str1);  // hello

  printf("문자열을 입력하세요 : ");
  scanf("%s", str2);  //스 킵됨
  printf("입력한 문자열 : %s \n", str2); //world 출력됨

 해결방법

  두번쨰 scanf  전에 getchar() 입력하기

  또는 setbuf(stdout,null); 

'알고리즘' 카테고리의 다른 글

문자열 조작 함수 직접 구현  (0) 2022.11.09
우선순위 큐  (0) 2022.10.31
Queue (배열로 원형큐만들기) 구현  (0) 2022.10.30
스택 구현  (0) 2022.10.30
14600. [Pro] 성적 데이터베이스  (0) 2022.10.29