Question
Need help fixing this warning in C++ for this program. I have highlighted the part of code that is giving the error. The if statement
Need help fixing this warning in C++ for this program. I have highlighted the part of code that is giving the error. The if statement is needed so if the user enters any numbers below 0 or above 255 program should return as invalid and abort. All warnings are treated as errors that need to be fixed.
The warning/error received:
error: comparison of unsigned expression >= 0 is always true [-Werror=type-limits] 24 | if((r >=0 && r <= 255) && (g >=0 && g <= 255) && (b >=0 && b <= 255))
Sample Run:
$ 0 0 0 black 0 128 0 green 255 255 0 yellow 240 240 240 white $
//////////////////////////////////////////////////////Code Below/////////////////////////////////////////////////////////////////////////////
#include
using namespace std; // place this after the #includes
struct rgb { unsigned char red; unsigned char green; unsigned char blue; };
istream& operator >>(istream& is, rgb& colour) { unsigned r, g, b; is >> r >> g >> b; if((r >=0 && r <= 255) && (g >=0 && g <= 255) && (b >=0 && b <= 255)) //giving error { colour.red = r; colour.green = g; colour.blue = b; } else { cout << "ERROR occurred. Aborting... "; exit(-1); } return is; }
ostream& operator <<(ostream& os, rgb const& colour) { os << static_cast(colour.red) << " " << static_cast(colour.green) << " " << static_cast(colour.blue); return os; } double distance(rgb const& a, rgb const& b) { double A = 0.0; double x =(a.red - b.red); double y =(a.green - b.green); double z =(a.blue - b.blue); A = x*x + y*y +z*z; A = sqrt(A); return A; } int main() { array const colours{{ { 0x00, 0x00, 0x00 }, // 0: black { 0x80, 0x00, 0x00 }, // 1: maroon { 0x00, 0x80, 0x00 }, // 2: green { 0x80, 0x80, 0x00 }, // 3: olive { 0x00, 0x00, 0x80 }, // 4: navy { 0x80, 0x00, 0x80 }, // 5: purple { 0x00, 0x80, 0x80 }, // 6: teal { 0xC0, 0xC0, 0xC0 }, // 7: silver { 0x80, 0x80, 0x80 }, // 8: grey { 0xFF, 0x00, 0x00 }, // 9: red { 0x00, 0xFF, 0x00 }, // 10: lime { 0xFF, 0xFF, 0x00 }, // 11: yellow { 0x00, 0x00, 0xFF }, // 12: blue { 0xFF, 0x00, 0xFF }, // 13: fushsia { 0x00, 0xFF, 0xFF }, // 14: aqua { 0xFF, 0xFF, 0xFF } // 15: white }};
array const colour_names{ "black", "maroon", "green", "olive", "navy", "purple", "teal", "silver", "gray", "red", "lime", "yellow", "blue", "fushsia", "aqua", "white" };
for(rgb value{}; cin >> value;) { vector distances; distances.reserve(colours.size()); transform(
begin(colours), end(colours), back_inserter(distances), [&value](auto const& colour) { return distance(colour, value); } ); size_t index = std::numeric_limits::max(); double smallest_distance = std::numeric_limits::max(); for(auto i=begin(distances), iEnd=end(distances); i != iEnd; ++i) { if (*i < smallest_distance) { smallest_distance = *i; index = distance(distances.begin(), i); } } cout << colour_names[index] << ' '; } return 0; }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started