acuario97   3년 전

숫자를 하나 더 입력을 해야 종료가되네요... 왜 그럴까여

dldyddlwl   3년 전

8번 라인 scanf("%d ",&arr[i]);

"%d " 는 정수형 이후, 하나 이상의 공백 문자, 그리고 공백문자가 아닌 값을 기다립니다. 즉, 다음의 경우,

문제에 나온 예제입니다.

10 5
1 10 4 9 2 3 8 5 7 6

1 공백 10 공백 4 공백 9 공백 2 공백 3 공백 8 공백 5 공백 7 공백 6 (?)  

마지막 6에서 비록 뒤에 공백문자가 있지만, scanf는 공백문자가 아닌 값이 입력버퍼에 들어올 때까지 대기합니다.

따라서, 글쓴이님이 말씀하신, 숫자 하나를 더 입력해야 끝나는 경우는 이 때문입니다.

마지막에 입력해준 숫자는, 입력버퍼에 그대로 남아있습니다.

따라서, 5번 라인 scanf("%d %d\n", &a,&b); 입력도 마찬가지로, 만약 10 5만 입력한다면 끝나지 않습니다. 

scanf는 공백의 개념을  '\n', ' ', '\t' 도 포함합니다. 따라서, %d %d\n 또한 마찬가지로 공백 이후 공백이 아닌 값이 올 때까지 대기하기 때문입니다.

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