인프런 커뮤니티 질문&답변

조희선님의 프로필 이미지
조희선

작성한 질문수

독하게 시작하는 C 프로그래밍

문자, 정수 입력과 개행문자 제거

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

해결된 질문

작성

·

514

·

수정됨

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이 매번 제거되는 탓에 끝나지 못하고 계속 입력을 받는 순환구조가 만들어 집니다. 참고하시기 바랍니다. :)

 

조희선님의 프로필 이미지
조희선

작성한 질문수

질문하기