입력(Input)
1. 입력의 기본
c++ 은 다음과 같은 형식으로 입력을 받게 된다.
c 의 입력 메서드인 scanf 는 경계검사를 하지 않기 때문에, 위험하다. -> 문자열은 마지막을 확인하기 위해서 \0을 넣어 주는데, scanf 는 \0를 확인하지 않는다.
마찬가지로 c++ 에서도 같은 문제를 가지고 있다.
char[] == char*
cin 은 char 배열의 길이를 모른다..
메모리 할당 이슈(내가 할당한 메모리보다 더 많이 사용하게 된다) -> 나는 4만큼의 메모리를 할당했는데, 실제로는 \o까지 해서 5개의 메모리를 사용하게 된다.
때문에, 메모리를 더 사용하는 문제를 막기 위해서 다음과 같은 예방이 필요하다.
2. 스트림 상태
입력스트림에서 무언가를 읽어왔는데, 성공/실패의 상태를 어떻게 알 수 있을까?
c++ 에서는 기본적으로 스트림의 상태를 저장한다.
다음 코드를 보자.
다음 코드에서 입력값에 따라 어떠한 결과가 나오는지 확인해보자.
스트림에 담겨있는 입력 버리기
clear() : 스트림을 좋은 상태(good state) 로 돌려 줌 -> 좋은 상태로 돌려주는 것이지, 현재 꼬여버린 스트림 자체를 날리는 것은 아니다.
ignore() : 스트림의 지정한 수만큼 입력을 버림 -> 아래 예제들은 파일 끝(eof)에 도달하거나, 지정한 수만큼 문자를 버리면 멈춤
get()
뉴라인 문자를 만나기 직전까지의 모든 문자를 가져옴
뉴라인 문자는 입력 스트림에 남아있음
getline()
뉴라인 문자를 만나기 직전까지의 모든 문자를 가져옴
뉴라인 문자는 입력 스트림에서 버림
다음 코드를 통해서 입력에 대한 내용을 정리해보자
Last updated