unsigned char 如何取 int 值?

How can a unsigned char take a int value?

在 class 中,我们必须编写一个代码来给出颜色等等,我很难解释(我是法国人)。 所以问题是在我的代码中(下面),我想阻止用户输入一个最多 255 的数字,但它实际上不起作用,我该如何修复它;p 谢谢大家

#include <iostream>
using namespace std;

//Déclarations :

struct Srgb
{

    unsigned char r ;

    unsigned char g;

    unsigned char b;
};

union UColor
{

    unsigned int val;

    Srgb components;

    unsigned char tabCol[3];
};

int valeur_unique;


int main()
{

    int entier;
    UColor  rgb1;
    int choix;

    cout << "Vous preferez entrer valeur unique(1) ou RGB(2) ? : " << endl;
    cin >> choix;
    switch (choix) {

    case 1:        //Valeur unique
        cout << " Entrez la valeur totale : " << endl;
        cin >> valeur_unique;
        break; //CASE VALEUR UNIQUE


    case 2:    //RGB

               ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// ROUGE
        cout << " Entrez la valeur du rouge :" << endl;
        cin >> entier;
        rgb1.components.r = entier;

        while (rgb1.components.r >= 256) {
            cout << "Rouge ne peux pas etre superieur a 255" << endl;
            cout << " Entrez la valeur du rouge : " << endl;
            cin >> entier;
            rgb1.components.r = entier;
        }

        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////  VERT
        cout << " Entrez la valeur du vert :" << endl;
        cin >> entier;
            rgb1.components.g = entier;

            while (rgb1.components.g >= 256) {
                cout << "Vert ne peux pas etre superieur a 255" << endl;
                cout << " Entrez la valeur du vert : " << endl;
                cin >> entier;
                rgb1.components.g = entier;
            }

        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BLEU
        cout << " Entrez la valeur du bleu :" << endl;
        cin >> entier;
            rgb1.components.b = entier;

            while (rgb1.components.b >= 256) {
                cout << "Bleu ne peux pas etre superieur a 255" << endl;
                cout << " Entrez la valeur du bleu : " << endl;
                cin >> entier;
                rgb1.components.b = entier;
            }

        cout << (int) rgb1.components.r << endl;
        cout << (int)rgb1.components.g << endl;
        cout << (int)rgb1.components.b<< endl;
        break; //CASE RGB
    }
}

抱歉,如果我没有正确使用它。 所以正如你所看到的,如果用户输入 sup 或等于 256 的内容,我会尝试通过 while 循环执行此操作,它仍然会要求输入内容,但它不会,为什么?

在分配到您的字符之前检查输入是否有效!

如果您立即赋值给您的字符,然后检查字符是否小于 256,它将总是

您需要在赋值之前检查 int(更好的是,检查它是否在您想要的 [0, 255] 范围内):

cout << " Entrez la valeur du rouge :" << endl;
cin >> entier;

while (entier < 0 || entier > 255) {
    cout << "Rouge ne peux pas etre superieur a 255" << endl;
    cout << " Entrez la valeur du rouge : " << endl;
    cin >> entier;
}

// Only assign after we know entier is good!
rgb1.components.r = entier;