首页 > 解决方案 > unsigned char 如何获取 int 值?

问题描述

在课堂上,我们必须编写一个给出颜色等的代码,我很难解释事情(我是法国人)。所以问题是在我的代码(下)中,我想阻止用户输入最多 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
    }
}

对不起,如果我没有正确使用这个东西。所以正如你所看到的,在while循环中我尝试这样做,如果用户输入一些sup或等于256它仍然要求输入一些东西,但它没有,为什么?

标签: c++cin

解决方案


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

如果您立即分配到您的 char 中,然后检查 char 是否低于 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;

推荐阅读