C++에서 cin.fail 메서드 사용

Jinku Hu 2023년10월12일
  1. fail메서드를 사용하여 C++의 스트림 개체에서 오류가 발생하는지 확인
  2. good 메서드를 사용하여 C++의 스트림 개체에서 오류가 발생하는지 확인
  3. Stream 개체를 식으로 사용하여 C++에서 오류가 발생하는지 확인
C++에서 cin.fail 메서드 사용

이 기사에서는 C++의 스트림 객체에서 fail메소드를 올바르게 사용하는 여러 방법을 보여줍니다.

fail메서드를 사용하여 C++의 스트림 개체에서 오류가 발생하는지 확인

fail메소드는 basic_ios클래스의 내장 함수이며 지정된 스트림에 잘못된 상태가 있는지 확인하기 위해 호출 할 수 있습니다. 이 함수는 인수를 취하지 않으며 스트림 객체에 오류가 발생하면 부울 값 true를 반환합니다. 스트림 객체에는 현재 상태를 설명하는 여러 상수 비트가 있습니다. 이 상수는-goodbit,eofbit,failbitbadbit입니다. failbit이 설정되어 있으면 작업이 실패했지만 스트림 자체는 양호한 상태임을 의미합니다. 스트림이 손상되면badbit가 설정됩니다. fail 메소드는 주어진 스트림 객체에badbit 또는failbit가 설정된 경우 true를 반환합니다.

#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::ifstream;
using std::ostringstream;
using std::string;

int main() {
  string filename("tmp.txt");
  string file_contents;

  auto ss = ostringstream{};
  ifstream input_file(filename);
  if (input_file.fail()) {
    cerr << "Could not open the file - '" << filename << "'" << endl;
    exit(EXIT_FAILURE);
  }

  ss << input_file.rdbuf();
  file_contents = ss.str();

  cout << file_contents;
  exit(EXIT_SUCCESS);
}

good 메서드를 사용하여 C++의 스트림 개체에서 오류가 발생하는지 확인

또는good 내장 함수를 호출하여 스트림 객체가 양호한 상태인지 확인할 수 있습니다. 스트림 상태에 설정된goodbit 상수는 다른 모든 비트가 지워짐을 의미하므로 확인하면 스트림의 양호한 상태를 의미합니다. 이러한 상수는ios_base 클래스 내에서 정의되며std::ios_base::goodbit로 참조 될 수 있습니다. 다음 코드 예제는 good메서드 반환 값의 논리적 부정을 스트림에서 오류를 확인하는 조건으로 지정할 수 있음을 보여줍니다.

#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::ifstream;
using std::ostringstream;
using std::string;

int main() {
  string filename("tmp.txt");
  string file_contents;

  auto ss = ostringstream{};
  ifstream input_file(filename);
  if (!input_file.good()) {
    cerr << "Could not open the file - '" << filename << "'" << endl;
    exit(EXIT_FAILURE);
  }

  ss << input_file.rdbuf();
  file_contents = ss.str();

  cout << file_contents;
  exit(EXIT_SUCCESS);
}

Stream 개체를 식으로 사용하여 C++에서 오류가 발생하는지 확인

이전 방법 인failgood은 코드를 더 읽기 쉽게 만들기 때문에 최신 C++ 스타일에서 스트림 오류를 평가하는 데 권장되는 방법입니다. 스트림 객체 자체를 표현식으로 지정하여 오류가 발생하는지 확인할 수도 있습니다. 후자의 방법은 더 모호하지만 오류 검사 조건문을 구현하는 올바른 방법입니다.

#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::ostringstream;
using std::string;

int main() {
  string filename("tmp.txt");
  string file_contents;

  auto ss = ostringstream{};
  ifstream input_file(filename);
  if (!input_file) {
    cerr << "Could not open the file - '" << filename << "'" << endl;
    exit(EXIT_FAILURE);
  }

  ss << input_file.rdbuf();
  file_contents = ss.str();

  cout << file_contents;
  exit(EXIT_SUCCESS);
}
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ IO