0

I am making a numbers game.

If you input a number from 1-5 (1, 2, 3, 4 and 5)

It will display a text.

I tried tried doing something like this:

if (numbers == 1 || 2 || 3 || 4 || 5)
{
    std::cout << "TEXT";
}

(didnt work)

but is there an better way to put in a range of integers?

2 Answers2

3

The code you posted, equivalent to:

if ((numbers == 1) || (2) || (3) || (4) || (5))
{
    std::cout << "TEXT";
}

It won't work, because the expressions 2, 3, 4 and 5 are always not 0, they will always be true, and the if statement will only determine if numbers is 1.

I think you want to write it like this:

if (numbers == 1 || numbers == 2 || numbers == 3 || numbers == 4 || numbers == 5)
{
    std::cout << "TEXT";
}

And then an easier, cleaner way:

if (numbers >= 1 && numbers <= 5)
{
    std::cout << "TEXT";
}
Sprite
  • 3,222
  • 1
  • 12
  • 29
1

Besides @Sprite's answer, following works too:

#include <iostream>
#include <algorithm>

int main()
{
    int valid[] { 1, 2, 3, 4, 5 };
    int number = 5;

    if (std::any_of(std::begin(valid), std::end(valid), [number](auto i) { return i == number; })) {
        std::cout << "Valid number " << number << std::endl;
    } else {
        std::cout << "Invalid number " << number << std::endl;
    }

    number = 6;

    if (std::any_of(std::begin(valid), std::end(valid), [number](auto i) { return i == number; })) {
        std::cout << "Valid number " << number << std::endl;
    } else {
        std::cout << "Invalid number " << number << std::endl;
    }
    return 0;
}

Read about std::any_of.

DEMO

NutCracker
  • 11,485
  • 4
  • 44
  • 68