입력(Input)

1. 입력의 기본

c++ 은 다음과 같은 형식으로 입력을 받게 된다.

char firstName[20];
cin >> firstName;
  • c 의 입력 메서드인 scanf 는 경계검사를 하지 않기 때문에, 위험하다. -> 문자열은 마지막을 확인하기 위해서 \0을 넣어 주는데, scanf 는 \0를 확인하지 않는다.

  • 마찬가지로 c++ 에서도 같은 문제를 가지고 있다.

    • char[] == char*

    • cin 은 char 배열의 길이를 모른다..

    • 메모리 할당 이슈(내가 할당한 메모리보다 더 많이 사용하게 된다) -> 나는 4만큼의 메모리를 할당했는데, 실제로는 \o까지 해서 5개의 메모리를 사용하게 된다.

  • 때문에, 메모리를 더 사용하는 문제를 막기 위해서 다음과 같은 예방이 필요하다.

char firstName[4];
cin >> setw(4) >> firstName;

2. 스트림 상태

입력스트림에서 무언가를 읽어왔는데, 성공/실패의 상태를 어떻게 알 수 있을까?

  • c++ 에서는 기본적으로 스트림의 상태를 저장한다.

  • 다음 코드를 보자.

  • 다음 코드에서 입력값에 따라 어떠한 결과가 나오는지 확인해보자.

스트림에 담겨있는 입력 버리기

  • clear() : 스트림을 좋은 상태(good state) 로 돌려 줌 -> 좋은 상태로 돌려주는 것이지, 현재 꼬여버린 스트림 자체를 날리는 것은 아니다.

  • ignore() : 스트림의 지정한 수만큼 입력을 버림 -> 아래 예제들은 파일 끝(eof)에 도달하거나, 지정한 수만큼 문자를 버리면 멈춤

  • get()

    • 뉴라인 문자를 만나기 직전까지의 모든 문자를 가져옴

    • 뉴라인 문자는 입력 스트림에 남아있음

  • getline()

    • 뉴라인 문자를 만나기 직전까지의 모든 문자를 가져옴

    • 뉴라인 문자는 입력 스트림에서 버림

다음 코드를 통해서 입력에 대한 내용을 정리해보자

Last updated