오류 처리와 상태
스트림 상태 확인하기
오류 처리와 상태은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
스트림 상태 비트
모든 스트림은 상태 플래그를 사용해 현재 상태를 추적합니다.
- 정상 상태 비트: 모든 것이 정상입니다.
- 파일 끝 비트: 파일 끝에 도달했습니다.
- 실패 비트: 논리적 오류가 발생했습니다(형식이 잘못되었습니다).
- 잘못된 상태 비트: 심각한 입출력 오류가 발생했습니다.
#include <iostream>
#include <fstream>
int main() {
std::ifstream in("missing_98765.txt");
std::cout << std::boolalpha << "good: " << in.good() << '\n';
return 0;
}스트림 검사
스트림은 bool로 변환됩니다. 사용할 수 있을 때는 true가 됩니다. if (!in)을 사용하면 실패를 간결하게 감지할 수 있습니다.
#include <iostream>
#include <fstream>
int main() {
std::ifstream in("nope_55555.txt");
if (!in) std::cout << "stream not usable\n";
else std::cout << "ok\n";
return 0;
}good, eof, fail, bad
각 플래그에는 상태를 조회하는 메서드가 있습니다: good(), eof(), fail(), bad()입니다.
#include <iostream>
#include <sstream>
int main() {
std::istringstream s("abc");
int x;
s >> x; // fails: not a number
std::cout << std::boolalpha;
std::cout << "fail: " << s.fail() << '\n';
std::cout << "bad: " << s.bad() << '\n';
return 0;
}추출 실패
>>로 예상한 형식을 분석할 수 없으면 failbit이 설정되고 대상 값은 변경되지 않습니다.
#include <iostream>
#include <sstream>
int main() {
std::istringstream s("hello");
int n = -1;
if (!(s >> n)) std::cout << "could not read an int, n stays " << n << '\n';
return 0;
}상태 초기화
실패 플래그가 설정되면 clear()를 호출해 초기화하기 전까지 스트림을 사용할 수 없습니다.
#include <iostream>
#include <sstream>
int main() {
std::istringstream s("x 42");
int n;
s >> n; // fails on 'x'
s.clear(); // reset state
std::string word;
s >> word; // now reads 'x'
std::cout << "recovered: " << word << '\n';
return 0;
}잘못된 입력 무시
clear()를 호출한 후 ignore()를 사용해 문제가 되는 문자를 discard한 다음 다시 시도하십시오.
#include <iostream>
#include <sstream>
#include <limits>
int main() {
std::istringstream s("bad 100");
int n;
while (!(s >> n)) {
s.clear();
s.ignore(std::numeric_limits<std::streamsize>::max(), ' ');
}
std::cout << "read " << n << '\n';
return 0;
}EOF와 오류 구분
읽기 반복문이 끝난 후 정상적인 eof()인지 실제 bad() 실패인지 확인하십시오.
#include <iostream>
#include <sstream>
int main() {
std::istringstream s("1 2 3");
int x;
while (s >> x) {}
std::cout << std::boolalpha << "reached eof: " << s.eof() << '\n';
std::cout << "hardware error: " << s.bad() << '\n';
return 0;
}open 후 확인
파일을 open한 직후에는 항상 스트림을 확인하여, 경로가 없거나 읽을 수 없을 때 즉시 실패하도록 하십시오.
#include <iostream>
#include <fstream>
int main() {
std::ifstream in("absent_11111.txt");
if (!in.is_open()) {
std::cout << "open failed, aborting\n";
return 1;
}
std::cout << "never reached\n";
return 0;
}예외 활성화
exceptions()를 사용하면 오류가 발생할 때 스트림이 예외를 발생시키도록 할 수 있어, 조용히 발생하는 실패를 잡을 수 있는 std::ios_base::failure로 바꿀 수 있습니다.
#include <iostream>
#include <fstream>
int main() {
std::ifstream in;
in.exceptions(std::ios::failbit);
try {
in.open("ghost_22222.txt");
} catch (const std::exception& e) {
std::cout << "caught open failure\n";
}
return 0;
}읽기 개수 검증
이진 read 후 gcount()는 실제로 읽은 바이트 수를 알려 주므로, 일부만 읽힌 경우를 감지할 수 있습니다.
#include <iostream>
#include <fstream>
int main() {
int v = 9;
std::ofstream("g.bin", std::ios::binary).write(reinterpret_cast<const char*>(&v), sizeof(v));
int out;
std::ifstream in("g.bin", std::ios::binary);
in.read(reinterpret_cast<char*>(&out), sizeof(out));
std::cout << "read " << in.gcount() << " bytes\n";
return 0;
}견고한 읽기 반복문
기법을 함께 사용하십시오. 반복문 안에서 스트림을 검사하고, 반복문이 끝난 후 정상적인 종료인지 오류인지 구분합니다.
#include <iostream>
#include <sstream>
int main() {
std::istringstream s("5 10 15");
int total = 0, x;
while (s >> x) total += x;
if (s.eof()) std::cout << "sum = " << total << " (clean)\n";
else std::cout << "error during read\n";
return 0;
}빠른 확인
스트림 상태에 대한 이해도를 확인해 보십시오.
복습
스트림 오류 처리를 배웠습니다.
- 상태 플래그는 good/eof/fail/bad이며, 해당 메서드로 조회하거나 스트림을 bool로 검사할 수 있습니다
clear()는 상태를 초기화하고ignore()는 잘못된 입력을 discard합니다- 정상적인
eof()와 실제 오류를 구분해야 하며,exceptions()는 예외를 발생시킬 수 있고gcount()는 이진 읽기를 검증합니다
다음 과정에서는 <random>으로 난수를 생성합니다.
AI 튜터와 함께 C++을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 51
- 레슨
- 203
자주 묻는 질문
“오류 처리와 상태” 강의는 무료인가요?
네 — “오류 처리와 상태” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“오류 처리와 상태”에서 뭘 배우나요?
스트림 상태 확인하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“오류 처리와 상태” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.