Проверка на ввод только числа и в конкретном диапазоне
Сейчас я занимаюсь написанием курсовой и одним из важных пунктов курсовой является проверка на корректность вводимых данных. У меня возник вопрос как осуществить проверку на то, ввел ли пользователь именно цифру и входит ли она в допустимый диапазон.
Вот мой код (это типа базы данных результатов экзамена студентов):
#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 (так как это оценка за экзамен). Буду рад любой подсказке которая поможет осуществить эту проверку:)