데굴데굴이
데굴이의 개발일지
데굴데굴이
전체 방문자
오늘
어제
  • 분류 전체보기
    • 프로그래밍
      • C,C++
      • C#
      • 백준(BOJ)
      • 알고리즘
      • HTML
      • WinAPI
      • ETC
    • 유니티
      • 쉐이더
    • 컴퓨터 구조
    • 일본어

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 평가 순서
  • 컴파일
  • 알고리즘
  • 바구니 뒤집기
  • 정적 라이브러리
  • 재귀함수가 뭔가요?
  • 전처리
  • 라이브러리 적용
  • 최대 상승
  • 시퀀스 포인트
  • 동적 라이브러리 만들기
  • C
  • multable
  • 정적 라이브러리 만들기
  • 25644
  • msvc++
  • 동적 라이브러리 적용
  • 25644번
  • C언어
  • 1032번#
  • 백준
  • 10811번
  • 1343번
  • Sequence Point
  • 10811
  • 1158번
  • 라이브러리
  • c++
  • 동적 라이브러리
  • BOJ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
데굴데굴이

데굴이의 개발일지

프로그래밍/C,C++

C++ 입력 버퍼 초기화 [ cin.ignore() ]

2022. 12. 28. 15:35
반응형

코드를 짜면서 입력을 받을때가 많습니다. 그럴때마다 우리는 cin으로 입력을 받아옵니다.

하지만 cin은 공백이 있으면 입력이 끝나기 떄문에 문자열을 입력받을때 공백이 있으면 받아오기 힘듭니다.

그럴때 쓰는 함수가 바로 getline() 함수입니다. getline함수는 공백까지 문자열로 받아오는 역활을 합니다.

 

콘솔에서 cin, cin.getline() 으로 입력을 받을경우 바로 변수에 저장되지않고 입력 버퍼에 저장되었다가.

입력 버퍼에 저장된 값을 변수로 저장을 하며 입력 버퍼에 있는 문자들은 사라지는 것입니다.

버퍼 란?
장치와 장치 간의 데이터 전송을 할 때 완충작용을 하기 위한 임시 데이터 저장 공간.

여기서 문제가 있는데 입력 버퍼에 입력받은 값을 저장하고 그 값을 변수에 저장하면서 입력 버퍼에 있는 값들은 사라지는데

개행문자는 사라지지 않고 입력 버퍼에 남아있게됩니다.

 

그렇게 되면 cin.getline()은 입력을 받을때 입력 버퍼에 남아있는 개행문자인 '\n'을 읽게되고 콘솔로 입력을 받기전에

'\n'을 읽은 후 입력을 받았다고 판단하여 '\n'만 읽은후 코드를 넘겨버립니다.

(cin.getline은 cin과 다르게 '\n'까지 읽으며 cin은 '\n'직전까지 읽습니다.)

 

이럴때, 해결방법은 cin.ignore()을 사용하여, 버퍼에 있는 모든 내용을 제거하게 되어 cin.getline() 가 제대로 작동하게 되는 것입니다.

위 코드를 실행하게 되면 textCase 변수와 str 변수의 입력을 받을 것 같지만 예상과는 달리 textCase 만 입력을 받고 프로그램을 종료하게 됩니다.

 

그 이유는 앞에서 설명한것 처럼 textCase를 입력했을때 입력버퍼에 '\n'가 남아 있기 떄문에 cin.getline()에서 str 변수를 입력 받으려 할때 '\n'이 들어가 입력이 넘어간 것 입니다.

 

 

위 사진과 같이 입력 후 앞에 cin.ignore()을 사용하여 버퍼를 초기화 해주면 이제야 제대로 실행되는걸 볼수가 있습니다.

입력 받은 후에 버퍼를 초기화를 해주는 방법이 기본적인 방법이기에 사용을 하면 초기화를 시켜주는 버릇을 들이는게 좋을것 같습니다.

 

 

 

 

 

 

 

 

 

 

 

반응형

'프로그래밍 > C,C++' 카테고리의 다른 글

[C++]람다 표현식(Lambda Expression) 정리  (0) 2024.02.04
C++ 동적 라이브러리 만들기  (1) 2023.01.03
C++ 정적 라이브러리 만들기  (0) 2023.01.03
C 평가 순서 [unspecified, undefined, Sequence Point]  (1) 2022.12.30
    '프로그래밍/C,C++' 카테고리의 다른 글
    • [C++]람다 표현식(Lambda Expression) 정리
    • C++ 동적 라이브러리 만들기
    • C++ 정적 라이브러리 만들기
    • C 평가 순서 [unspecified, undefined, Sequence Point]
    데굴데굴이
    데굴데굴이

    티스토리툴바