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;
在 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;