변수 초기화 방법
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 은 입력 스트림을 담당하는 객체
- 추출 연산자
>> 을 통해 입력값을 받아 변수에 저장
>>가 연속으로 나올 때 마다 입력 버퍼에서 값을 추출하여 변수에 저장
>> 처리 메커니즘
- std::cin이 좋은 상태가 아닌 경우 (예: 이전에 std::cin이 실패한 경우) 추출을 시도하지 않고 추출 프로세스가 즉시 중단. 정상이라면 다음으로 넘어감
- 기존 입력 버퍼에서 선행 공백 문자(공백, 탭, 개행문자)를 먼저 제거. 이전 입력 줄에 남아 있던 개행문자도 제거됨
- 입력 버퍼가 비어 있으면 사용자가 데이터를 더 입력할 때까지 대기. 입력된 데이터에서 선행 공백 역시 삭제된다.
- 공백 문자를 다 제거하고 추출 시작. 값을 저장할 변수 타입에 맞게 변환 가능한 부분까지만 읽거나 공백 문자를 만날 때까지 추출한 후 값을 변수에 저장
- 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);
std::cout << ch;
std::cin.get(ch);
std::cout << ch;
std::cin >>은 공백 문자를 제거하므로 추출 불가능
std::cin.get(x)를 통해 공백 문자도 추출하여 저장 가능
- 문자 하나씩만 추출하므로
char 변수에만 사용 가능
Reference
learncpp.com