• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

scanf("%d\n", &input)

23.12.02 15:04 작성 23.12.02 15:49 수정 조회수 408

0

수업을 듣다 궁금증이 생겨서 질문드려요~

scanf("%d\n", &input);

4입력시 4\n여서 종료하려면 \n하나가 더 필요 한거 까지는 이해가 됐습니다. 그후에 \n를 계속 눌러도 안넘어가지는게 어떤 것때문인지 궁금합니다.

%d\n 형식을 사용하므로 형식에 안맞는 \n는 안읽고

%d\n의 형식만 읽는건가요?

아니면 %d\n 는 숫자와 (1개 이상의 공백문자)여서 엔터가 계속 입력되고 %d(다른정수)\n입력시 \n를사용하므로 %d만남기고 종료되는건가요?

형식이 달라서 안읽는건지 \n가 1개이상의 공백문자를뜻해서 여러번읽는건지 궁금합니다!

답변 1

답변을 작성해보세요.

1

scanf() 함수는 형식문자에 공백문자(White space)를 입력할 경우 이를 스킵합니다. 즉, 입력된 문자 하나를 빼버리는 것이죠. 결국 입력의 끝을 의미하는 '\n' 입력은 제거되고 아직 입력 스트림이 끝나지 않았다고 판단해 사용자 입력을 대기하는 상황이 벌어집니다. 다음 코드처럼 '\n' 대신 공백이나 '\t'를 넣어도 결과는 같습니다.

scanf_s("%d ", &a);
scanf_s("%d\t", &a);

아무튼 입력의 끝을 의미하는 \n이 매번 제거되는 탓에 끝나지 못하고 계속 입력을 받는 순환구조가 만들어 집니다. 참고하시기 바랍니다. :)

 

채널톡 아이콘