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

woojunghyck님의 프로필 이미지
woojunghyck

작성한 질문수

홍정모의 따라하며 배우는 C언어

6.15 중첩된 루프들

6-15강 첫번째 예제 질문

작성

·

187

·

수정됨

2

사용자로부터 첫번째 문자와 마지막 문자, 그리고 몇번 반복할건지를 직접 입력받는 경우를 가정하여 다음과 같이 코딩해봤습니다.

문자를 입력받고, 정수로 형변환한 후, 정수를 한개씩 늘려가다가 사용자가 지정한 마지막 문자를 만나면 멈추고 다시 문자로 출력되도록 하면 되겠다 싶어 작성한 코드입니다.

첫번째 scanf까지는 정상적으로 작동하는데 두번째 scanf값을 입력하면 실행창이 꺼져버립니다. 어느 부분에서 오류가 발생한건지 알 수 있을까요?

답변 2

2

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

scanf() 를 사용하실 때 '%c' 형식 지정자를 사용하는 경우에 대해서는 버퍼에 남아있을 수 있는 공백 문자(space, 개행, 탭 등)를 주의해야 합니다.

만약, scanf("%c", &변수); 와 같은 사용에서, 첫 번째 문자를 입력받고 나서 엔터를 치게 되면, 개행 문자가 버퍼에 남아있게 되고, 해당 개행 문자가 두 번째 scanf() 에서 %c 형식 지정자에 의해 바로 입력으로 처리되어버립니다.

이러한 문제를 해결하기 위해서, scanf() 로 문자를 입력 받은 후 getchar() 과 같은 함수를 사용하여 버퍼에 남아있을 수 있는 개행 문자를 처리해주고는 합니다.

관련된 내용은 강의 7.2 표준 입출력 함수들 getchar(), putchar() 예제 에서 보다 자세하게 학습하시게 되시며, 다른 강의들의 예시 코드에서도 자주 반복학습 하시게 됩니다.

주어진 연습 문제 뿐만 아니라, 스스로 의지를 가지고 무엇인가 더 구현하려고 해보신 점이 인상 깊네요.

0

안녕하세요, 인프런 AI 인턴입니다. woojunghyck님.

질문 주신 내용은 scanf를 이용한 문자 입력에서 발생하는 문제로 보입니다. 사용자로부터 문자를 입력받을 때 scanf 함수를 연속해서 사용하면, 첫 번째 문자 입력 후 엔터를 치면서 입력 버퍼에 남게 되는 개행 문자 ‘\n’을 두 번째 scanf가 읽어들이는 문제일 가능성이 높습니다.

이러한 문제는 scanf를 사용할 때 입력 버퍼에 남은 개행 문자를 명시적으로 소비해주지 않으면 다음 입력에 영향을 줄 수 있습니다. 이와 관련한 해당 강의의 다른 수강생 질문답변을 참고하시는 것이 도움이 될 것 같습니다.

다음은 입력 버퍼와 관련된 질문의 답변 중 일부입니다:

  • 6:00 연습문제 3번 질문있습니다. - 이 질문에서는 %cscanf로 입력받을 때 발생하는 문제와 또다른 질문에 대한 답변이 포함되어 있습니다. 해당 답변에서는 %c 전에 공백을 두어 입력 버퍼의 개행 문자를 무시하는 방법이 제시되었습니다.

scanf("%c", &변수); 호출에 앞서 공백 " " 을 넣는 것으로 개행 문자가 입력을 방해하지 않도록 할 수 있습니다. 그러니 위 코드에서 두 번째 scanf 호출을 scanf(" %c", &last);로 수정해 보세요.

원하는 답변이 있으셨다면 도움이 되셨기를 바라며, 구체적인 코드 수정이 필요하거나 추가적인 설명이 필요한 경우에는 해당 강의의 Q&A 섹션을 이용하시는 것을 권합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

woojunghyck님의 프로필 이미지
woojunghyck

작성한 질문수

질문하기