Сочетание того, как вы определили GetMark
, и способа его использования, является ошибочным.
Независимо от того, что вы делаете в GetMark
, значение, введенное в main
, не изменяется.
Измените GetMark
на:
int GetMark()
{
std::cout << "enter mark (0 - 100): " << std::endl;
int mark;
while ( std::cin >> mark )
{
if ( mark >= 0 && mark <= 100)
{
return mark;
}
std::cout << "Invalid value " << mark << std::endl;
std::cout << "enter mark (0 - 100): " << std::endl;
}
// Unable to read.
// Throw exception, or exit with an error message.
}
и измените его использование.Вместо
cout << "enter mark (0 - 100): " << endl;
cin >> marks[i];
GetMark(marks[i]);
используйте
marks[i] = GetMark();
Рабочая версия GetMark
:
int GetMark()
{
std::cout << "enter mark (0 - 100): " << std::endl;
std::string line;
while ( getline(std::cin, line) )
{
std::istringstream str(line);
int mark;
if ( str >> mark )
{
if ( mark >= 0 && mark <= 100)
{
return mark;
}
}
std::cout << "Invalid input: " << line << std::endl;
std::cout << "enter mark (0 - 100): " << std::endl;
}
// Unable to read.
// Throw exception, or exit with an error message.
return 0;
}
Live Demo .