#include <iostream>
#include <stdlib.h>
#include <limits>
bool invalid_input(std::istream& in) {
return in.rdstate() == std::ios::failbit;
}
std::istream& get_single_grade(std::istream& in, int& grade) {
std::cout << "Please enter a grade value between 0 and 100." << "\n";
if (in >> grade) {
if(grade<0 || grade>100)
in.setstate(std::ios::failbit);
}
return in;
}
bool get_grade(std::istream& in, int &grade) {
while(invalid_input(get_single_grade(in, grade))) { //while we failed to get data
in.clear(); //clear the failure flag
//ignore the line that the user entered, try to read the next line instead
in.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
}
return in.good();
}
int main(int argc, char* argv[])
{
int grade = -1; // grade will hold grade value; initialized to -1
if (get_grade(std::cin, grade) == false) {
std::cerr << "unxpected EOF or stream error!\n";
return false;
}
std::cout << grade << "\n";
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxsaW1pdHM+Cgpib29sIGludmFsaWRfaW5wdXQoc3RkOjppc3RyZWFtJiBpbikgewogICAgcmV0dXJuIGluLnJkc3RhdGUoKSA9PSBzdGQ6Omlvczo6ZmFpbGJpdDsKfQoKc3RkOjppc3RyZWFtJiBnZXRfc2luZ2xlX2dyYWRlKHN0ZDo6aXN0cmVhbSYgaW4sIGludCYgZ3JhZGUpIHsKICAgIHN0ZDo6Y291dCA8PCAiUGxlYXNlIGVudGVyIGEgZ3JhZGUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuIiA8PCAiXG4iOwogICAgaWYgKGluID4+IGdyYWRlKSB7CiAgICAgICAgaWYoZ3JhZGU8MCB8fCBncmFkZT4xMDApCiAgICAgICAgICAgIGluLnNldHN0YXRlKHN0ZDo6aW9zOjpmYWlsYml0KTsKICAgIH0KICAgIHJldHVybiBpbjsKfQoKYm9vbCBnZXRfZ3JhZGUoc3RkOjppc3RyZWFtJiBpbiwgaW50ICZncmFkZSkgewogICAgd2hpbGUoaW52YWxpZF9pbnB1dChnZXRfc2luZ2xlX2dyYWRlKGluLCBncmFkZSkpKSB7IC8vd2hpbGUgd2UgZmFpbGVkIHRvIGdldCBkYXRhCiAgICAgICAgIGluLmNsZWFyKCk7IC8vY2xlYXIgdGhlIGZhaWx1cmUgZmxhZwogICAgICAgICAvL2lnbm9yZSB0aGUgbGluZSB0aGF0IHRoZSB1c2VyIGVudGVyZWQsIHRyeSB0byByZWFkIHRoZSBuZXh0IGxpbmUgaW5zdGVhZAogICAgICAgICBpbi5pZ25vcmUoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnN0cmVhbXNpemU+OjptYXgoKSwnXG4nKTsgCiAgICB9CiAgICByZXR1cm4gaW4uZ29vZCgpOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQp7ICAgIAogICAgaW50IGdyYWRlID0gLTE7IC8vIGdyYWRlIHdpbGwgaG9sZCBncmFkZSB2YWx1ZTsgaW5pdGlhbGl6ZWQgdG8gLTEKICAgIGlmIChnZXRfZ3JhZGUoc3RkOjpjaW4sIGdyYWRlKSA9PSBmYWxzZSkgewogICAgICAgIHN0ZDo6Y2VyciA8PCAidW54cGVjdGVkIEVPRiBvciBzdHJlYW0gZXJyb3IhXG4iOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gICAgCiAgICBzdGQ6OmNvdXQgPDwgZ3JhZGUgPDwgIlxuIjsKICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cn0=