• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

질문드립니다.

21.03.12 10:07 작성 조회수 159

1

복습하는 과정에서 scanf()에 \n를 사용하면 다음단계로 넘어가지 않는다고 메모를 해두었는데 검색을 해봤지만 잘 이해가 안되서 그런데 자세한 설명을 부탁드릴수 있을까요?

답변 2

·

답변을 작성해보세요.

2

안소님의 프로필

안소

2021.03.13

scanf 에서 %c 로 문자를 받는 입력이 아니라면, scanf 에서의 공백 문자 혹은 \n 같은 것들은 공백이 아닌 문자가 나타날때까지 공백 문자들을 모두 무시하겠다는 뜻이 됩니다. 그리고 공백이 아닌 문자의 입력이 들어올 때까지 기다리고 공백이 아닌 문자를 받아야 종료가 되는듯합니다.

그래서 위에 답변 주신 분의 예제 코드로 설명을 드려보자면 만약 scanf("%d\n", num) 으로 5 를 입력 하시면 입력이 끝나기는커녕 한번 더 입력을 받게 됩니다. 그 이유는 5 를 입력하시고 엔터를 딱 치시면 입력 버퍼에서는 5 와 \n 이 들어가는데 \n 은 공백문자이므로 무시됩니다. 그리고 공백이 아닌 문자의 입력을 기대하는데 입력 버퍼가 비워져서 받을게 없으므로 입력을 사용자로부터 한번 더 받게 되는 것입니다. 

https://electro-don.tistory.com/entry/scanf-n-%EA%B4%80%EB%A0%A8

항상 감사합니다.

혹시 버퍼에 대한 자세한 내용은 뒷 강의에서 나오나요? 아니면 따로 공부를 해야하나요? 해설답변에서 버퍼라는 단어를 많이봐서 질문드립니다.

1

haon님의 프로필

haon

2021.03.12

#include <stdio.h>

int main() {

int num;

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

printf("%d", num);

return 0;

}

저도 잘모르겠는데 이런코드를 실행해보니까 두번 입력을 받았습니다. 

첫번째입력이 5인경우: num을 입력받으면 num에 5가 들어갔기때문에 당연히num은 5가됩니다.

두번째입력이 3인경우: \n를 입력받았더니 scanf("%d\n", num, 저장할곳); 저장할곳이없습니다.

이런느낌이니까 결론은"num = 5"라고 생각하면될것같아요. 

더 알고싶으면 실행해보고 생각하면 좋을것같아요!

감사합니다.