cutlake2000   2년 전

올라온 질문 중에 이번 질문글과 겹친 부분이 있어 다시 질문글 작성하게 되었습니다.

https://www.acmicpc.net/board/...

이 부분이 가장 궁금했었는데, 일단은 해결되었습니다.

여기에 한 가지 더 궁금한 점이 있습니다. N이 10이라면 for문을 10번 실행하게 되는데, scanf_s는 10을 넘어서까지 값 입력이 가능하더군요. N을 10, X를 5로 잡고, 정수를 1부터 20까지 입력하니 결과값은 1 2 3 4까지만 나옵니다.

입력은 엔터칠 때까지 가능하되, for문에서 scanf_s를 N번 반복하도록 하였으니, N번의 정수까지만 읽고 if문 실행 뒤에 나머지 정수 값 (11 ~ 20)은 그냥 없어지는건가요?

비전공자로 혼자 독학 중이라 기초 지식이 많이 부족합니다..ㅠㅜ 감사합니다.

djm03178   2년 전

사용자가 엔터를 치기 전까지 프로그램은 잠시 실행이 중단된 상태에 머무르게 됩니다. 엔터를 치면 다시 프로그램의 실행이 재개되며, 그때까지 입력한 내용은 모두 입력 스트림에 쌓이게 됩니다. scanf는 이 입력 스트림에 있는 글자들을 순서대로 보면서 서식 문자에 해당하는 값 (예를 들면 %d면 정수에 해당하는 것)을 찾아 저장해줍니다. 자기가 읽어야 할 내용까지 모두 읽었으면, 뒤에 남은 내용이 있더라도 scanf는 그대로 남겨두고 종료합니다. 그래서 다음 번 scanf가 다시 호출되었을 때 그 scanf는 아까 scanf가 입력 버퍼에서 읽고 남겨 둔 나머지 부분에서 다시 정수를 하나 찾고 나머지는 남겨두고, 그 다음 번 호출되는 scanf도 마찬가지로 이전 scanf가 입력 버퍼에 남겨둔 것을 이어서 읽고... 하는 것을 이 코드에서는 N번 반복하는 것입니다.

이건 루프를 빠져나온 뒤에도 마찬가지입니다. 지금까지 scanf가 읽지 않고 남겨 둔 내용은 그대로 입력 버퍼에 남아있습니다. 그래서 N이 10인데 20개의 수를 입력했다면 입력 버퍼에는 아직 뒤쪽 10개의 수를 입력한 문자들이 그대로 남아있습니다. 거기서 만일 scanf를 10번 더 수행하면 나머지 10개의 값을 더 읽어올 수 있는 것이고, 프로그램이 종료될 때까지 더 이상 입력을 수행하지 않으면 자연스럽게 소멸됩니다.

cutlake2000   2년 전

정말 너무 감사합니다 ㅠㅜ.. 한 번에 이해가 확 되었습니다. 다시 한 번 정말 감사드립니다.

댓글을 작성하려면 로그인해야 합니다.