I need help badly


For some reason My program is not accepting 10 as a valid number and I dont know why any tips or ideas.



#include <iostream>
#include <iomanip>
#include <cctype>
#include <limits>
#include <string>
using namespace std;

void getJudgeData(string jname, double &score);
double getAverage(double score1, double score2, double score3, double score4, double score5);
double getLowest(double score1, double score2, double score3, double score4, double score5);
double getHighest(double score1, double score2, double score3, double score4, double score5);

int main()
{
double score1, score2, score3, score4, score5, average_sc, lowest_sc, highest_sc;

cout << fixed;
cout << setprecision(2) << endl;

getJudgeData("Judge 1", score1);
getJudgeData("Judge 2", score2);
getJudgeData("Judge 3", score3);
getJudgeData("Judge 4", score4);
getJudgeData("Judge 5", score5);


average_sc = getAverage( score1, score2, score3, score4, score5);
lowest_sc = getLowest( score1, score2, score3, score4, score5);
highest_sc = getHighest( score1, score2, score3, score4, score5);

cout << "score 1" << '\t' << "score 2" << '\t' << "score 3" << '\t' << "score 4" << '\t' << "score 5\n";
cout << score1 << '\t' << score2 << '\t' << score3 << '\t' << score4 << '\t' << score5 << endl;

cout << "lowest score = " << lowest_sc << endl;
cout << "highest score = " << highest_sc << endl;
cout << "average score = " << average_sc << endl;


system("pause");
return 0;
}
void getJudgeData(string jname , double &score)
{



do
{
cout << "enter " << jname << " score (must be greater then 0 and less or equal to 10 and numeric)\n";
cin >> score;

if (cin.fail())
{
cout << "Your input must be numeric try again\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
score = -1000;


}
else if (score <= 0 || score >= 10)
{
cout << "The score must be greater then 0 and less or equal to 10 \n";
score = 1000;

}



} while (score <= 0 || score >= 10);
}
double getLowest(double score1, double score2, double score3, double score4, double score5) {
double lowest_score;

if ((score1 <= score2) && (score1 <= score3) && (score1 <= score4) && (score1 <= score5))
{
lowest_score = score1;
}

else if ((score2 <= score1) && (score2 <= score3) && (score2 <= score4) && (score2 <= score5))
{
lowest_score = score2;
}

else if ((score3 <= score1) && (score3 <= score2) && (score3 <= score4) && (score3 <= score5))
{
lowest_score = score3;
}

else if ((score4 <= score1) && (score4 <= score2) && (score4 <= score3) && (score4 <= score5))
{
lowest_score = score4;
}

else if ((score5 <= score1) && (score5 <= score2) && (score5 <= score3) && (score5 <= score4))
{
lowest_score = score5;
}
return lowest_score;

}
double getHighest(double score1, double score2, double score3, double score4, double score5) {
double highestScore;

if ((score1 >= score2) && (score1 >= score3) && (score1 >= score4) && (score1 >= score5))
{
highestScore = score1;
}

else if ((score2 >= score1) && (score2 >= score3) && (score2 >= score4) && (score2 >= score5))
{
highestScore = score2;
}

else if ((score3 >= score1) && (score3 >= score2) && (score3 >= score4) && (score3 >= score5))
{
highestScore = score3;
}

else if ((score4 >= score1) && (score4 >= score2) && (score4 >= score3) && (score4 >= score5))
{
highestScore = score4;
}

else if ((score5 >= score1) && (score5 >= score2) && (score5 >= score3) && (score5 >= score4))
{
highestScore = score5;
}
return highestScore;

}
double getAverage(double score1, double score2, double score3, double score4, double score5) {

double average_score, lowestScore, highestScore;
highestScore = getHighest(score1, score2, score3, score4, score5);
lowestScore = getLowest(score1, score2, score3, score4, score5);

return average_score = (((score1 + score2 + score3 + score4 + score5) - (lowestScore + highestScore)) / 3);

}
Change score <= 0 || score >= 10 and remove the =. The same goes for the other input checks. It is failing because score >= 10 is true and thus triggering your fail check.
Your function getJudgeData seems to complicated.
Try this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void getJudgeData(string jname, double &score)
{
  bool valid_input = false;
  while (!valid_input)
  {
    cout << "enter " << jname << " score (must be greater then 0 and less or equal to 10 and numeric)\n";
    cin >> score;

    if (cin.fail()) // not numeric input
    {
      cout << "Your input must be numeric try again\n";
      cin.clear();
      cin.ignore(numeric_limits<streamsize>::max(), '\n');
      score = -1000;
    }
    else // got numeric input
    {
      valid_input = score > 0 && score <= 10; // in the range?
      if (!valid_input)
        cout << "score must be greater then 0 and less or equal to 10\n"; 
    }
  }
}
Topic archived. No new replies allowed.