如何将cin转换为int值:1;C++

how to cin to int _value:1; C++

本文关键字:C++ int cin 转换      更新时间:2023-10-16

我试过一个代码,它想用1字节的整数来保存一个数字,如何用cin获取值,用cout输出值

struct SoNguyen{
    int _value:1;
    void Input(){
         // How I can cin value to _value;
    }
    void Output(){
        // How I can cout value of _value;
    }
}

谁得到小费了。!!

struct SoNguyen{
    int _value:1;
    void Input(){
        int value;
        std::cin >> value;
        _value = value;
    }
    void Output(){
        std::cout << _value;
    }
};

顺便说一句,整数不是1个字节,而是1位宽(想想他们为什么将此功能称为位字段)。然而,位字段是糟糕的编程实践,应该尽可能避免。如果您需要宽度为1字节的成员,请使用std::int8_tsigned char。如果您需要一个宽度为1位的,请使用bool(即使您浪费了7位,但在现代平台上这并不重要)。

实现类的输入/输出的一种更像C++的方法将包含运算符:

struct SoNguyen{
    int _value:1;
};
template<typename CharT, typename CharTraits>
std::basic_istream<CharT, CharTraits>& operator>> (std::basic_istream<CharT, CharTraits>& Stream, SoNguyen& Object)
{
    int Value;
    Stream >> Value;
    Object._value = Value;
    return Stream;
}
template<typename CharT, typename CharTraits>
std::basic_ostream<CharT, CharTraits>& operator<< (std::basic_ostream<CharT, CharTraits>& Stream, SoNguyen const& Object)
{
    return Stream << Object._value;
}

调用语法如下所示:

int main()
{
    SoNguyen foo;
    std::cin >> foo;
    std::cout << foo;
}

因此,它看起来直观(因为相同的语法也适用于基本类型)和模块化(您可以对任何流进行写入和读取)。

您必须读取一个基元类型-intcharshort。然后将基元类型分配给位字段。

void Input() {
   int i;
   std::cin >> i;
   _value = i;
}

void Input() {
   short i;
   std::cin >> i;
   _value = i;
}

等等。

输出是直接的。

void Output() {
   std::cout << _value;
}