无符号字符不输入所有 3 位数字
unsigned char not inputting all 3 digits
我正在尝试将颜色的RGB值存储到名为RGBTriple的结构中,该结构由三个无符号的字符红色,绿色,蓝色组成。我正在从文件中读取这些值,然后解析字符串并使用正确的变量分配正确的值。每当我读取无符号字符值时,即使值为 255,程序也只读取第一个数字。读入宽度、高度和颜色后。我正在创建一个图片对象。我在阅读宽度或高度方面没有任何问题。
这是我的RGB文件。
struct RGBTriple
{
unsigned char Blue;
unsigned char Green;
unsigned char Red;
RGBTriple();
RGBTriple(unsigned char Blue, unsigned char Green, unsigned char Red);
};
这是我的主要:
int pictureWidth, pictureHeight;
RGBTriple pictureColor;
string line;
getline(input, line);
istringstream iss(line);
iss >> pictureWidth;
iss >> pictureHeight;
iss >> pictureColor.Red;
iss >> pictureColor.Green;
iss >> pictureColor.Blue;
Picture newPicture(pictureWidth, pictureHeight, pictureColor);
下面是我的输入示例:第一行是读取图片对象的内容。
200 200 255 255 255
Point 66 66 000 000 000
Line 100 150 50 50 255 000 000
Rectangle 50 25 55 33 000 000 000
RTriangle 10 80 50 30 000 000 000
Star 29 29 15 000 000 000
Diamond 120 120 20 000 000 000
Polygon 150 0 175 0 175 50 150 25 X X 000 000 000
Circle 40 89 26 000 000 000
使用输入运算符
std::istream& operator >> (std::istream& stream, unsigned char& value)
而不是
std::istream& operator >> (std::istream& stream, short& value)
或
std::istream& operator >> (std::istream& stream, int& value)
所以它只读取 1 个字符。我建议你阅读short
或int
unsigned char
的本质,而不是将该值分配给以下结构:
getline(input, line);
istringstream iss(line);
int iValue = 0;
iss >> pictureWidth;
iss >> pictureHeight;
iss >> iValue;
pictureColor.Red = iValue;
iss >> iValue;
pictureColor.Green = iValue;
iss >> iValue;
pictureColor.Blue = iValue;
运算符重载>>根据操作数的类型解释流。 如果类型是char
它将读取字符代码而不是整数,因此当显示"255"时,将读取"2"并0x32值。
使用 std::uint8_t
而不是char
来存储 RGB 值可能更合适,在这种情况下,另一种可能性是显式重载>> 运算符以std::uint8_t
:
inline std::istream &operator >> (std::istream &is, std::uint8_t& c)
{
int iValue = 0;
is >> iValue;
c = iValue;
return is;
}
但是这样做了,你也被迫支持std::int8_t
和<<;除非你执行了很多这样的操作,否则提取到数字整数类型并按照Mykola的建议进行分配更有意义。
相关文章:
- 递归形成字符串中所有数字字符的中间和?
- C++ 从 std::string 中删除所有非数字字符
- 如何返回一串字母数字字符中的最大值(例如-1A003B3)?
- 有没有办法将最初作为字符串输入的数字字符数组复制到双向链表中
- 如何使用 c++ 将数字字符转换为字符串
- 从字符数组中修剪非字母数字字符的功能
- 使用find_if和isalnum在字符串中找到字母数字字符
- 循环直到整数输入在所需范围内无法处理非数字字符输入
- 确保字符串只包含字母数字字符的更好方法
- 用C++计算文本文件中的字母数字字符
- 使用cctype库搜索函数,以查找某个范围内的数字字符数
- 在读取C++行时过滤非字母数字字符
- C++ 如何从标准输入加载到最多 5 个字母数字字符的字符数组
- 如何知道小部件是否只接受数字字符
- 在 C++ STL 中,如何使用 regex_replace 从 std::string 中删除非数字字符
- i18n 去除非字母数字字符的友好方式
- 将字符数组拆分为字母数字字符和非字母数字字符
- 将多数字字符数转换为整数
- 在检测字符串是否包含数字字符时,这有什么问题
- 如何检测QString是否由所有数字字符组成