Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 정보처리기사
- SSG
- C언어
- 실습
- 마이크로소프트
- win32
- 핵심 요약
- 미가공
- MyThread
- mfc 실습
- 도움말
- mysql
- linux
- C++
- MFC 예제
- 유료강좌
- ListBox
- Tipsware
- C
- 김성엽
- 포트폴리오
- 정처기 독학
- do it c
- MyTread
- tips강좌
- 별찍기
- 별찍기 기초
- Time
- MFC
- 충무창업큐브
Archives
- Today
- Total
History
[C++] 표준 입력 스트림에서 입력 오류 처리하는 방법 본문
728x90
반응형
c++은 사용자에게 입력을 받을 때 cin객체를 이용하여 입력을 받는다.
#include <iostream>
using namespace std;
int main()
{
int data = 0;
cout << "정수 입력:";
cin >> data; //입력
cout << "data: "<<data<<endl; //출력
}
더보기
정수 입력:5
data: 5
결과는 위와 같다. 그러나 정수가 아니라 문자열을 입력하게 된다면 결과는 아래와 같다.
더보기
정수 입력:asd
data: 0
이렇게 0으로 출력이 된 이유는 자료형 때문이다. 현재 필자가 입력한 data의 자료형은 int 이기 때문에 문자열을 입력하면 cin객체에서 입력 실패로 인식한다. 그래서 어떠한 값도 입력되지 않았기에 data가 가지고 있던 초기값으로 출력이 된 것이다.
그래서 c++은 사용자가 입력에 성공했는지 확인할 수 있도록 fail이라는 함수를 제공한다. 이 함수는 성공하면 반환 값이 0 실패하면 반환 값을 1로 반환한다. 이제 fail함수를 이용하여 코드를 재 작성해보겠다. 코드는 아래와 같다.
#include <iostream>
using namespace std;
int main()
{
int data = 0;
cout << "정수 입력:";
cin >> data;
if (!cin.fail()){ //성공하면 반환 값이 0이기 때문에 !를 사용해서 1로 바꾼다.
cout << "data: " << data << endl;
}else{
cout << "값 오류";
}
}
더보기
정수 입력:asd
값 오류
값이 정상적으로 출력되었다. 그러면 이제 사용자가 제대로 입력할 때까지 반복하는 코드로 수정해보겠다.
코드는 아래와 같다.
#include <iostream>
using namespace std;
int main()
{
int data = 0;
cout << "정수 입력:";
cin >> data;
while (cin.fail()){
cout << "값 오류" << endl;
cin.clear(); //오류 상태 값을 초기화
cin.ignore(100, '\n'); //100개의 입력값을 무효화
cin >> data;
}
cout << "data: " << data << endl;
}
사용자가 문자열을 입력하면 입력 스트림 버퍼에 그대로 남아 있어서 cin.ignore함수로 잘못된 값을 입력 스트림 버퍼를 없애준다. 결과는 아래와 같다.
더보기
정수 입력:asd
값 오류
asdasd
값 오류
asdasdasd
값 오류
2
data: 2
728x90
반응형
'C,C++ > 개념 실습 프로그래밍' 카테고리의 다른 글
[C언어] strcat함수 직접 구현 (0) | 2022.10.26 |
---|---|
[C언어] 문자열 앞에 다른 패턴을 추가해야할 때 (0) | 2022.10.26 |
[c언어]별 찍기3 (0) | 2022.10.22 |
실수로 변수 이름을 @@@1,2,3으로 개발했을 때 (0) | 2022.10.22 |
#define으로 구성한 매크로 함수의 표현 (0) | 2022.10.22 |
Comments