[C++기초] 2. 입력
Index
입력스트림
C의 경우
-
scanf()
- 안전하지 않음
char firstName[20]; scanf("%s",firstName);
C++의 경우
-
cin
- scanf()를 어느정도 대체
char firstName[20]; cin >> firstName;
-
scanf()가 위험한 이유
-
scanf()는 경계검사를 하지 않는다.
- 그렇다면 cin은 같은 문제가 있을까?
- 같은 문제가 존재한다. 하지만 C보다 안전하고 간단한 처리과정 방법이 있다.
cin >> setw(4) >> firstName;
-
정수형 읽기
int hours; cin >> hours;
-
부동 소수점형 읽기
float price; cin >> price;
스트림 상태
C의 경우
if(fgets(line, 10, stdin) != NULL)
{
// ...
}
C++의 경우
cin >> line;
if(!cin.eof())
{
// ...
}
- ifstream 상태
- 네임스페이스 - ios_base
- 비트 플래그
- goodbit
- eofbit
- failbit
- badbit
- 메소드 버전
- good()
- eof()
- fail()
- bad()
예제
int number;
cin >> number;
입력값 | eofbit | failbit |
---|---|---|
456abc | unset | unset |
456 | (un)set | unset |
abc | unset | set |
eof | set | set |
입력 버리기
Clear()
- 스트링을 좋은상태(good state)로 돌려 줌.
- cin.clear();
ignore()
-
아래 예제들은 파일 끝에 도달하거나 지정한 수만큼 문자를 버리면 멈춤
cin.ignore(); // 문자 1개를 버림
cin.ignore(10); // 문자 10개를 버림
cin.ignore(10, '\n'); // 문자 10개를 버림. 단 그 전에 뉴라인 문자를 버리면 곧바로 멈춤
cin.ignore(LLONG_MAX, '\n'); // 최대 문자 수를 버림. 단, 그전에 뉴라인 문자를 버리면 곧바로 멈춤
get()
-
뉴라인 문자를 만나기 직전까지의 모든 문자를 가져옴
-
뉴라인 문자는 입력 스트림에 남아있음
get(fristName, 100); // 99개 문자를 가져오거나 뉴라인 문자가 나올 때까지의 문자를 가져옴 // 가져온 문자들을 char배열(firstName)에 배치함
get(firstName,100,'#'); //99개 문자를 가져오거나 '#'문자가 나올 때까지의 문자를 가져옴 // 가져온 문자들을 char배열(firstName)에 배치함
getline()
-
뉴라인 문자를 만나기 직전까지의 모든 문자를 가져옴
-
뉴라인 문자는 입력 스트림에서 버림
getline(fristName, 100); getline(fristName, 100, '#');