알고리즘
scanf 의 문제점
개발자자자
2022. 11. 1. 00:28
컴퓨터는 입력을 받을 때 버퍼라는 것을 이용해서 입력의 처리를 효율적으로 하고 있습니다.
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);