C++에서 부울 값 인쇄하기

Suraj P 2023년10월12일
  1. C++에서 True/False인 부울 값
  2. C++에서 부울 값을 인쇄하기 위해 삼항 문을 추가하여 printf() 수정
  3. cout에서 std::boolalpha를 사용하여 C++에서 부울 값 인쇄
  4. std::numpunc에 대한 사용자 정의 패싯을 사용하여 C++에서 부울 값 인쇄
  5. 결론
C++에서 부울 값 인쇄하기

C++에서 부울 값을 인쇄하려고 하면 std::cout에 의해 0 또는 1로 인쇄되지만 때로는 true 또는 false 형식으로 출력을 보는 것이 더 좋습니다. . 이 기사에서는 C++에서 부울 값을 텍스트 형식으로 인쇄하는 방법을 다룹니다.

C++에서 True/False인 부울 값

디버깅하는 동안 줄과 코드 줄과 로그 파일을 읽는 시나리오를 가정해 봅시다. 이제 오류와 숫자의 바다에서 0 또는 1을 놓치기 매우 쉽습니다. 따라서 bool 값을 true/false로 인쇄하는 것이 좋습니다.

이를 달성하기 위한 세 가지 다른 방법을 살펴보겠습니다.

C++에서 부울 값을 인쇄하기 위해 삼항 문을 추가하여 printf() 수정

가장 간단한 방법은 printf()를 약간 수정하면 true 또는 false를 인쇄할 수 있습니다. printf()를 사용하여 bool을 인쇄할 때 bool 값에 대한 특정 매개변수가 없기 때문에 %d 형식을 사용해야 합니다.

bool은 int보다 짧기 때문에 printf() 문에서 전달되면 int로 승격됩니다. 그러나 이것은 평범한 오래된 01을 인쇄하므로 삼항 if-statement를 추가하고 형식 지정자를 %s로 변경하여 수정하면 원하는 true 또는 false를 얻습니다. 출력.

예제 코드:

#include <iostream>
using namespace std;

int main() {
  printf("boolean true: %d\n", true);
  printf("boolean false: %d\n", false);

  // modified printf()
  printf("boolean true: %s\n", true ? "true" : "false");
  printf("boolean false: %s\n", false ? "true" : "false");
}

출력:

boolean true: 1
boolean false: 0
boolean true: true
boolean false: false

이 방법의 문제는 소스 코드 파일이 커지고 복잡해지면 가독성이 떨어진다는 것입니다.

cout에서 std::boolalpha를 사용하여 C++에서 부울 값 인쇄

std::boolalpha<iomanip> 헤더 파일에서 찾을 수 있으며 입력 및 출력 스트림 기능과 함께 작동합니다. 표준 스트림에는 화면에 인쇄되는 내용을 결정하는 ‘boolalpha’ 플래그가 있습니다.

true로 설정하면 부울 값의 텍스트 형식, 즉 true 또는 false를 표시하지만 false로 설정하면 01로만 bool 출력을 얻습니다.

예시:

#include <iostream>
using namespace std;

int main() {
  cout << "when boolalpha flag is off\n";
  cout << "true: " << true << endl;
  cout << "false: " << false << endl;

  cout << "when boolalpha flag is on\n";
  cout << boolalpha << "true: " << true << endl;
  cout << boolalpha << "false: " << false << endl;
  cout << noboolalpha;
}

출력:

when boolalpha flag is off
true: 1
false: 0
when boolalpha flag is on
true: true
false: false

std::boolalphatrue 또는 false를 출력으로 인쇄하는 가장 좋은 방법 중 하나이지만 몇 가지 단점이 있습니다. 먼저 std::noboolalpha를 통해 사용한 후 boolalpha 플래그를 꺼야 합니다.

또 다른 문제는 일본어 또는 다른 언어로 코딩하고 true 또는 false 대신 "hai"(일본어로 true) 또는 "nai"(일본어로 false)를 인쇄하려는 경우 어떻게 되는지입니다. 또는 True 또는 False로 단어를 대문자로 표시하려는 경우 std::boolalpha만 사용하여 이러한 작업을 수행할 수 없습니다.

std::numpunc에 대한 사용자 정의 패싯을 사용하여 C++에서 부울 값 인쇄

이전 단락에서 언급했듯이 truefalse가 아닌 다른 것을 인쇄하거나 대문자 또는 현지화된 출력을 인쇄하려면 어떻게 해야 할까요? 이것은 std::numpunct에 대한 사용자 정의 facet를 사용하여 수행할 수 있습니다.

패싯은 특정 문화적 측면과 관련된 로케일 기능 세트를 설명하는 클래스입니다. 스트림 입력 및 출력 작업은 std::numpunct부터 std::numgetstd::numput을 사용하여 숫자 입력을 구문 분석하고 숫자 출력 형식을 지정합니다.

std::numpunctfacet는 숫자 구두점 기본 설정을 캡슐화합니다. std::numpunct에 있는 do_truename()do_falsename() 함수를 재정의하여 std::boolalpha 플래그가 활성화될 때 반환하려는 자체 문자열을 지정할 수 있습니다.

그런 다음 std::locale 객체와 std::cout.imbue()를 사용하여 현재 로케일을 대체할 수 있습니다.

예제 코드:

#include <ios>
#include <iostream>
#include <locale>
using namespace std;

class japanese_bool : public std::numpunct<char> {
 protected:
  std::string do_truename() const override { return "Hai"; }
  std::string do_falsename() const override { return "NAI"; }
};

int main() {
  cout.imbue(std::locale(std::locale(), new japanese_bool));
  cout << std::boolalpha;
  cout << "Japanese true : " << true << "\n";
  cout << "Japanese false : " << false << "\n";
  cout << noboolalpha;
}

위의 코드에서 new는 메모리 누수가 아니며 japanese_bool 객체는 암시적으로 참조 카운트되며 std::locale 참조가 범위를 벗어나면 자동으로 소멸됩니다.

출력:

Japanese true : Hai
Japanese false : NAI

결론

이 기사에서는 bool 출력을 truefalse로 인쇄하는 다양한 방법을 배웠습니다. true 또는 false를 출력으로 원할 경우 처음 두 가지 방법이 선호되는 반면, true 또는 false 대신 특정 출력을 원할 때 세 번째 방법이 선호됩니다.

작가: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub