변수 초기화, cin

김펭귄·2025년 7월 13일

C++

목록 보기
1/20

변수 초기화 방법

int a;
int b = 5;
int c ( 6 );
int d { 7 };  // 추천
int e {};     // 추천
  • int a; (선언만), int b = 5; (복사 초기화), int c(6); (직접 초기화), int d{7}; (중괄호 초기화), int e{}; (0으로 초기화)
  • 권장사항: 중괄호 초기화({}) 사용 권장 - 안전성과 일관성 제공

std::cin

std::cin >> x;
> 입력 : 5
> x에 5가 저장
  • std::cin 은 입력 스트림을 담당하는 객체
  • 추출 연산자 >> 을 통해 입력값을 받아 변수에 저장
  • >>가 연속으로 나올 때 마다 입력 버퍼에서 값을 추출하여 변수에 저장

>> 처리 메커니즘

  1. std::cin이 좋은 상태가 아닌 경우 (예: 이전에 std::cin이 실패한 경우) 추출을 시도하지 않고 추출 프로세스가 즉시 중단. 정상이라면 다음으로 넘어감
  2. 기존 입력 버퍼에서 선행 공백 문자(공백, 탭, 개행문자)를 먼저 제거. 이전 입력 줄에 남아 있던 개행문자도 제거됨
  3. 입력 버퍼가 비어 있으면 사용자가 데이터를 더 입력할 때까지 대기. 입력된 데이터에서 선행 공백 역시 삭제된다.
  4. 공백 문자를 다 제거하고 추출 시작. 값을 저장할 변수 타입에 맞게 변환 가능한 부분까지만 읽거나 공백 문자를 만날 때까지 추출한 후 값을 변수에 저장
  • 1단계에서 추출이 중단된 경우 이후의 모든 추출은 다 실패한다
  • 추출되지 않고 버퍼에 남은 문자들은 다음 추출 시도에 사용된다.

함정 예시

	int x{}, y{};
	std::cin >> x;
	std::cin >> y;
  • 4 5라고 입력 시 버퍼에 4 5\n라고 저장. 첫 >>에서 x에 4가 저장, 두 번째 >>에서 y에 5저장. 입력 버퍼에 값이 남아있었으므로 입력을 한 번만 해도 두 변수에 값이 저장된다.
	int x{}, y{};
	char c{};

	std::cin >> x >> y;
	std::cin >> c;
  • 4 \n5\na라고 입력 시 4, 5, a가 각 변수에 잘 저장됨.
  • a 4 c라고 입력 시 첫 번째 추출과정에서 실패했으므로 나머지도 다 실패. 모든 변수에 0이 저장됨
  • +4 5a\n 입력 시 4 5 a가 각 변수에 저장. 두 번째 추출에서 5까지는 읽었지만, a는 정수형 변수 y에 저장 못 하므로 5까지만 추출. 이후 a를 추출하여 c에 저장
  • 4 5.5 c\n 입력 시, 4 5 .이 저장. 두 번째 추출과정에서 .은 정수형 변수 y에 저장 못 하므로 5까지만 추출하여 저장. 이후 세 번째 추출과정에서 .을 추출하여 c에 저장
  • 999999999999999 같이 큰 수를 입력할 경우, x에 2147483647값이 저장되고 이후의 추출은 모두 실패하여 y와 c는 0값을 가짐

get()

char ch{};
std::cin.get(ch);  // "a " 입력
std::cout << ch;   // 'a' 출력

std::cin.get(ch);  // ' ' 저장
std::cout << ch;   // ' ' 출력
  • std::cin >>은 공백 문자를 제거하므로 추출 불가능
  • std::cin.get(x)를 통해 공백 문자도 추출하여 저장 가능
  • 문자 하나씩만 추출하므로 char 변수에만 사용 가능

Reference

learncpp.com

profile
반갑습니다

0개의 댓글