How to Validate User Input in C++

Validating the user input is very important for any program to ensure that the data being processed is correct and meaningful. In C++, various techniques can be used to validate the user input and in this article, we will learn how to validate the user input in C++.

Validate User Input in C++

To validate user input in C++, we can use the following methods:

1. Basic Data Type Validation

One of the most common forms of input validation is to ensure that the type of data provided by the user is valid or not. The std::cin object can be used to check the data type of the input. The following program illustrates the use of std::cin to validate the data type of the input:

C++ Program to validate the data type of the input

C++
//C++ Program to validate the data type of the input
#include <iostream>
#include <limits>
using namespace std;

int main() {
    int number;
    cout << "Enter an integer: ";
    while (!(cin >> number)) {
        cout << "Invalid input. Please enter an integer: ";
        cin.clear(); 
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    cout << "You entered: " << number << endl;
    return 0;
}

Output

Enter an integer: abcd
Invalid input. Please enter an integer: 1234
You entered: 1234

2. Range Validation

After ensuring the input is of the correct data type, we can use simple comparison operators to check if the input falls within a valid range or not. The following program illustrates how we can perform range validation for inputs in C++:

C++ Program to validate the range of the input

C++
//  C++ Program to validate the range of the input
#include <iostream>
#include <limits>
using namespace std;

int main() {
    int age;
    cout << "Enter your age (1-120): ";
    while (!(cin >> age) || age < 1 || age > 120) {
        cout << "Invalid input. Please enter an age between 0 and 120: ";
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    cout << "You entered: " << age << endl;
    return 0;
}

Output

Enter your age (0-120): 150
Invalid input. Please enter an age between 0 and 120: 25
You entered: 25

3. Validating String Formats

To validate the format of a string, for example checking if a string is a valid email address or not we can use the regular expressions also known as regex in C++. The following program illustrates how we can validate string formats using regex in C++:

C++ Program to Validate String Format for emails using regular expressions

C++
// C++ Program to Validate String Format for emails using regular expressions
#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main() {
    string email;
    regex email_pattern(R"((\w+)(\.{1}\w+)*@(\w+)(\.{1}\w+)+)");

    cout << "Enter an email address: ";
    getline(cin, email);

    if (!regex_match(email, email_pattern)) {
        cerr << "Invalid email format." << endl;
    } else {
        cout << "Valid email: " << email << endl;
    }

    return 0;
}

Output

Enter an email address: abcdatgmaildotcom
Invalid email format.
Enter an email address: abcd@gmail.com
Valid email: abcd@gmail.com

4. Custom Validations

For more specific validation needs, custom logic can be implemented by the users. Let us consider the following example, where we will validate a password that must contain a mix of characters.

C++ Program for Custom Validations

C++
// C++ Program for Custom Validations
#include <iostream>
#include <string>
using namespace std;

bool isValidPassword(const string& password) {
    if (password.length() < 8) return false;
    bool hasLower = false, hasUpper = false, hasDigit = false;
    for (char ch : password) {
        if (islower(ch)) hasLower = true;
        if (isupper(ch)) hasUpper = true;
        if (isdigit(ch)) hasDigit = true;
    }
    return hasLower && hasUpper && hasDigit;
}
int main() {
    string password;
    cout << "Enter a password (at least 8 characters, including uppercase, lowercase, and a digit): ";
    cin >> password;
    while (!isValidPassword(password)) {
        cout << "Invalid password. Please enter a valid password: ";
        cin >> password;
    }
    cout << "You entered a valid password." << endl;
    return 0;
}

Output

Enter a password (at least 8 characters, including uppercase, lowercase, and a digit): passwrd
Invalid password. Please enter a valid password: Password@123
You entered a valid password.

Time Complexity: O(N), where N is the length of the input.
Auxiliary Space: O(1), as no extra space is used for validation.