Ok I was able to validate user input if the user would enter a larger number or a negative number but how do you validate if the user happens to enter a letter or word, even character i.e % # @, or if the user enters all. How do you block the user to only enter a number for example 1 to 6?

Also, What about if the user presses space? Please show examples.

Is there an easier way as to using ASCII character set in maybe a switch case.

Edited by eblanco1: Forgot to add important information

6 Years
Discussion Span
Last Post by Narue

Read the entire line as a string and look at the input character by character.

You post your code that shows your attempt and explains what happened. Then we will help you make corrections.


How do you block the user to only enter a number for example 1 to 6?

You write your own raw input handler to read keystrokes and interpret them as desired. It should go without saying that this is terribly confusing unless you own the canvas[1] or are taking input from a GUI[2]. A much easier and more user-friendly method is simply to allow the user to type whatever he or she wants, then validate it and respond accordingly:

#include <iostream>
#include <stdexcept>
#include <boost/lexical_cast.hpp>

int main() try
    int value;
    while (true) {        
        std::cout << "Enter a number from 1 to 6: ";
        std::string line;
        if (!getline(std::cin, line))
            throw std::runtime_error("Invalid input");
        try {
            value = boost::lexical_cast<int>(line);
            if (value >= 1 && value <= 6)
                std::cerr << "Out of range\n";
        } catch (boost::bad_lexical_cast&) {
            std::cerr << "Invalid number" << '\n';
    std::cout << "The square of " << value << " is " << value * value << '\n';
} catch (std::exception& ex) {
    std::cerr << "Fatal error: " << ex.what() << '\n';

[1] ie. You're using a "primitive" graphics engine such as curses to draw in the console.
[2] In which case you should be using an appropriate input control for numeric values rather than straight text.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.