프로그래밍/C++ 문법

C++ cin 객체 알아보기

studylida 2023. 1. 17. 21:00

1. cin

cin은 istream 클래스의 객체로, narrow characters(8비트 문자로 인코딩되는 문자들)를 위한 표준 입력 스트림(standard input stream)이다. cin은 C stream인 stdin과 대응되고 동기화된다. 표준 입력 스트림이란 프로그램에서 입력을 받는 통로이다. 기본적으로는 키보드로부터 입력을 받지만, 파일로부터 입력을 받을 수도 있다. 추출 연산자(extraction operator) >>를 사용하여 타입을 가진 데이터(formatted data)를 입력받을 수 있고, read와 같은 멤버 함수를 사용하여 타입이 지정되지 않은 데이터(unformatted data)를 입력받을 수 있다. cin 객체는 <iostream 헤더에 외부 링크(external linkage)와 정적 지속시간(static duration)으로 선언된다. 즉, cin 객체는 어디서든 참조 가능하며, 프로그램 종료 전까지 생존한다. 

 

C++ 11부터는 In terms of static initialization order, cin은 ios_base::Init 타입의 객체가 처음 생성되는 시점 이전에 정상적으로 생성되고 초기화되는 것이 보장된다. 이때, <iostream>을 include하는 것은 정적 지속시간을 가진 객체 중 하나를 초기화한 것으로 간주된다. 이는 <iostream>을 정상적으로 이용하기 위함이다. 

 

또한 cin은 표준 출력 스트림 cout과 연결되어 있다. 이는 cout의 버퍼가 cin 객체에서 입력 작업을 수행하기 전에 cout 객체의 버퍼가 비워지는 것을 의미한다. 이렇게 되는 것은 입력과 출력이 제대로 동기화되며 출력이 지연되지 않도록 하기 위함이다.

 

프로그램은 cin을 사용하는 입력 작업과 wcin(또는 기타 stdin에서 수행되는 넓은 입력작업)을 사행하는 입력 작업을 혼용해서는 안된다. 하나의 입력 작업이 수행되면, 표준 입력 스트림은 좁은 문자 또는 넓은 문자를 처리하는 방향을 가지게 된다. 이는 stdin에서 freopen을 호출함을 통해 안전하게 바꿀 수 있다.

 

istream을 통해 cin에서 지원하는 함수를 알 수 있다. 자주 사용하는 함수 목록은 다음과 같다. 

  • get
  • getline
  • ignore
  • peek
  • read
  • tellg
  • seekg

다음은 ios를 통해 지원되는 함수이다. 

  • eof
  • fail
  • clear
  • fill

 

 

 

getline()

 

 

 

stringstream

 

 

 

 

 

 

 

 

 

 

 

 

 

Wide characters are similar to character datatype. The main difference is that char takes 1-byte space, but wide character takes 2-bytes (sometimes 4-byte depending on compiler) of space in memory. For 2-byte space wide character can hold 64K (65536) different characters. So the wide char can hold UNICODE characters. The UNICODE values are international standard which allows for encoding for characters virtually for any character of any language.