簡體   English   中英

未簽名的字符未輸入所有3位數字

[英]unsigned char not inputting all 3 digits

我正在嘗試將顏色的RGB值存儲到名為RGBTriple的結構中,該結構由三個無符號字符Red,Green,Blue組成。 我正在從文件中讀取這些值,然后解析字符串,並使用正確的變量分配正確的值。 每當我讀取無符號char值時,即使值是255,程序也只會讀取第一個數字。在讀取寬度,高度和顏色之后。我正在創建圖片對象。 我在閱讀寬度或高度時沒有任何問題。

這是我的RGBTriple

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個字符。 我suggesrt你閱讀shortint的instread 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的建議進行分配會更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM