具有cin功能的参数传输

时间:2015-09-16 13:41:18

标签: c++ methods parameters cin

我希望用户能够一个接一个地输入RGB颜色,我尽量保持代码简单。下面的代码工作,没有错误,但我不明白为什么它不正确的顺序R> G> B,第一个输入的值在这种情况下是蓝色,这是不需要的。

cout << "Enter successively red-, green, blue-part: " << endl;
c.setColor(readColor(cin), readColor(cin), readColor(cin));

定义了setColor:

void RGB_Color::setColor(int red, int green, int blue) {
    this->red = red;
    this->green = green;
    this->blue = blue;

readColor函数:

int readColor(istream &stream)
{
    int i;
    stream >> i;
    return i;
}

1 个答案:

答案 0 :(得分:0)

函数参数的评估顺序未指定,因此readColor次调用可以按任何顺序发生。一个简单的解决方法是明确订单:

int r,g,b;
std::cin >> r >> g >> b;
c.setColor(r,g,b);

另一种可能性是为operator>>重载RGB_Color(如果成员数据是私有的话,将其设为friend):

std::istream& operator>> (std::istream& is, RGB_Color& color) {
    is >> color.red >> color.green >> color.blue;
    return is;
}