Проверка на ввод только числа и в конкретном диапазоне

Сейчас я занимаюсь написанием курсовой и одним из важных пунктов курсовой является проверка на корректность вводимых данных. У меня возник вопрос как осуществить проверку на то, ввел ли пользователь именно цифру и входит ли она в допустимый диапазон.

Вот мой код (это типа базы данных результатов экзамена студентов):

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <time.h>
#pragma warning(disable:4996)

using namespace std;

int n = 0;

struct Marks
{
    string SubjectName;
    string TeacherSurname;
    int Mark;
};

struct ExamResult
{
    string F;
    string I;
    string O;
    int NumberGradeBook;
    string FacultyName;
    int Course;
    Marks Result[5];
};

void InputInfo(ExamResult result[], int b)
{
    cin.ignore(32767, '\n');
    for (int i = 0 + n; i < b + n; i++)
    {

        cout << "\nInput F: ";
        getline(cin, result[i].F, '\n');

        cout << "\nInput I: ";
        getline(cin, result[i].I, '\n');

        cout << "\nInput O: ";
        getline(cin, result[i].O, '\n');

        cout << "\nInput Grade book number: ";
        cin >> result[i].NumberGradeBook;

        cin.ignore(32767, '\n');
        cout << "\nInput Faculty name: ";
        getline(cin, result[i].FacultyName, '\n');

        cout << "\nInput Course: ";
        cin >> result[i].Course;

        cout << "\nInput Exam Result for 5 subject: ";
        for (int j = 0; j < 5; j++)
        {
            cin.ignore(32767, '\n');
            cout << "\nInput Subject Name: ";
            getline(cin, result[i].Result[j].SubjectName, '\n');

            cout << "\nInput Teacher Name: ";
            getline(cin, result[i].Result[j].TeacherSurname, '\n');

            cout << "\nInput Mark: ";
            cin >> result[i].Result[j].Mark;
        }
        cin.ignore(32767, '\n');
    }
    n += b;
}

void OutputInfo(ExamResult result[])
{
    cout << endl << "Information about student exam result: " << endl;
    for (int i = 0; i < n; i++)
    {
        cout << "\nFIO: " << result[i].F << " " << result[i].I[0] << "." << result[i].O[0] << "." << endl;
        cout << "Grade book number: " << result[i].NumberGradeBook << endl;
        cout << "Faculty Name: " << result[i].FacultyName << endl;
        cout << "Course: " << result[i].Course << endl;
        cout << "\nExam Result: " << endl << endl;
        for (int j = 0; j < 5; j++)
        {
            cout << "Subject Name: " << result[i].Result[j].SubjectName << endl;
            cout << "Teacher Surname: " << result[i].Result[j].TeacherSurname << endl;
            cout << "Mark: " << result[i].Result[j].Mark << endl;
        }
    }
}

void Search(ExamResult result[], int N)
{
    int NumberGradeBook_find = 0;
    cout << "\nInput Grade Book number for search: ";
    cin >> NumberGradeBook_find;
    for (int i = 0; i < N; i++)
    {
        if (result[i].NumberGradeBook == NumberGradeBook_find)
        {
            cout << endl << "Information about student exam result: " << endl;
            for (int i = 0; i < n; i++)
            {
                cout << "\nFIO: " << result[i].F << " " << result[i].I[0] << "." << result[i].O[0] << "." << endl;
                cout << "Grade book number: " << result[i].NumberGradeBook << endl;
                cout << "Faculty Name: " << result[i].FacultyName << endl;
                cout << "Course: " << result[i].Course << endl;
                cout << "\nExam Result: " << endl << endl;
                for (int j = 0; j < 5; j++)
                {
                    cout << "Subject Name: " << result[i].Result[j].SubjectName << endl;
                    cout << "Teacher Surname: " << result[i].Result[j].TeacherSurname << endl;
                    cout << "Mark: " << result[i].Result[j].Mark << endl;
                }
            }
        }
    }
}

void Free(ExamResult result[])
{
    cout << "";
}

int main()
{
    int number = 0;
    setlocale(LC_ALL, "Russian");
    const int N = 50;
    ExamResult* mas = new ExamResult[N];
    int function;
    int b = 2;

    //InputInfo(mas, 1);
    do
    {
        cout << endl;
        cout << "Введите нужную функцию:" << endl;
        cout << "1 - Добавление нового студента" << endl;
        cout << "2 - Вывод на экран массива студентов" << endl;
        cout << "3 - Поиск результата студента по номеру зачётки" << endl;
        cout << "0 - Выход" << endl;
        cout << "Введите номер функции: ";
        cin >> function;
        switch (function)
        {
        case 1:cout << "Введите количество записей, которые вы хотите ввести: "; cin >> number; InputInfo(mas, number); b++; break;
        case 2:OutputInfo(mas); break;
        case 3:Search(mas, n); break;
        case 0:Free(mas); break;
        default:cout << "Такой функции нет" << endl;
        }

    } while (function != 0);
}

Например в этом участке кода

        cout << "\nInput Exam Result for 5 subject: ";
        for (int j = 0; j < 5; j++)
        {
            cin.ignore(32767, '\n');
            cout << "\nInput Subject Name: ";
            getline(cin, result[i].Result[j].SubjectName, '\n');

            cout << "\nInput Teacher Name: ";
            getline(cin, result[i].Result[j].TeacherSurname, '\n');

            cout << "\nInput Mark: ";
            cin >> result[i].Result[j].Mark;
        }
        cin.ignore(32767, '\n');

Я хочу сделать проверку поля Mark, на то, является ли оно числом и входит ли оно в диапазон от 1 до 5 (так как это оценка за экзамен). Буду рад любой подсказке которая поможет осуществить эту проверку:)


Ответы (0 шт):