C++에서 부울 값 인쇄하기
- C++에서 True/False인 부울 값
-
C++에서 부울 값을 인쇄하기 위해 삼항 문을 추가하여
printf()
수정 -
cout
에서std::boolalpha
를 사용하여 C++에서 부울 값 인쇄 -
std::numpunc
에 대한 사용자 정의 패싯을 사용하여 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
로 승격됩니다. 그러나 이것은 평범한 오래된 0
과 1
을 인쇄하므로 삼항 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
로 설정하면 0
및 1
로만 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::boolalpha
는 true
또는 false
를 출력으로 인쇄하는 가장 좋은 방법 중 하나이지만 몇 가지 단점이 있습니다. 먼저 std::noboolalpha
를 통해 사용한 후 boolalpha
플래그를 꺼야 합니다.
또 다른 문제는 일본어 또는 다른 언어로 코딩하고 true
또는 false
대신 "hai"
(일본어로 true) 또는 "nai"
(일본어로 false)를 인쇄하려는 경우 어떻게 되는지입니다. 또는 True
또는 False
로 단어를 대문자로 표시하려는 경우 std::boolalpha
만 사용하여 이러한 작업을 수행할 수 없습니다.
std::numpunc
에 대한 사용자 정의 패싯을 사용하여 C++에서 부울 값 인쇄
이전 단락에서 언급했듯이 true
나 false
가 아닌 다른 것을 인쇄하거나 대문자 또는 현지화된 출력을 인쇄하려면 어떻게 해야 할까요? 이것은 std::numpunct
에 대한 사용자 정의 facet
를 사용하여 수행할 수 있습니다.
패싯
은 특정 문화적 측면과 관련된 로케일 기능 세트를 설명하는 클래스입니다. 스트림 입력 및 출력 작업은 std::numpunct
부터 std::numget
및 std::numput
을 사용하여 숫자 입력을 구문 분석하고 숫자 출력 형식을 지정합니다.
std::numpunct
의 facet
는 숫자 구두점 기본 설정을 캡슐화합니다. 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 출력을 true
와 false
로 인쇄하는 다양한 방법을 배웠습니다. true
또는 false
를 출력으로 원할 경우 처음 두 가지 방법이 선호되는 반면, true 또는 false 대신 특정 출력을 원할 때 세 번째 방법이 선호됩니다.