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