c++ - 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它仍然要求输入一些东西,但它没有,为什么?
解决方案
在分配给您的字符之前检查输入是否有效!
如果您立即分配到您的 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;
推荐阅读
- node.js - https 在 Linux 中无法使用 node/express/webpack
- java - Oracle Fusion Middleware 安装意外错误 Nullpointer 异常
- java - 不是在 Eclipse-Java 中创建的日志文件
- algorithm - 在 fortran 中使用蒙特卡罗方法估计 pi
- php - .htaccess :多个 RewriteCond 不起作用。严重错误
- amazon-cognito - 使用 AWS Cognito 保护 REST API
- javascript - Rails 6 网络打包程序。Js插件不起作用
- java - InjectMocks 几次
- angular - 将数组与 JSON 匹配
- android - preoccupation : Firebase 无限滚动列表视图在滚动时加载 10 个项目