fork(1) download
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <limits>
  4.  
  5. bool invalid_input(std::istream& in) {
  6. return in.rdstate() == std::ios::failbit;
  7. }
  8.  
  9. std::istream& get_single_grade(std::istream& in, int& grade) {
  10. std::cout << "Please enter a grade value between 0 and 100." << "\n";
  11. if (in >> grade) {
  12. if(grade<0 || grade>100)
  13. in.setstate(std::ios::failbit);
  14. }
  15. return in;
  16. }
  17.  
  18. bool get_grade(std::istream& in, int &grade) {
  19. while(invalid_input(get_single_grade(in, grade))) { //while we failed to get data
  20. in.clear(); //clear the failure flag
  21. //ignore the line that the user entered, try to read the next line instead
  22. in.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
  23. }
  24. return in.good();
  25. }
  26.  
  27. int main(int argc, char* argv[])
  28. {
  29. int grade = -1; // grade will hold grade value; initialized to -1
  30. if (get_grade(std::cin, grade) == false) {
  31. std::cerr << "unxpected EOF or stream error!\n";
  32. return false;
  33. }
  34. std::cout << grade << "\n";
  35. return EXIT_SUCCESS;
  36. }
Success #stdin #stdout #stderr 0s 3344KB
stdin
A
stdout
Please enter a grade value between 0 and 100.
Please enter a grade value between 0 and 100.
stderr
unxpected EOF or stream error!