Having trouble with if, else if, and else statements

I'm trying to code a program that will tell me the average and letter grade for three tests put in. I have the averaging worked out, but I can't seem to figure out how to get the correct letter grade. I'm fairly new to programming, so any help would be nice. Thanks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  // What grade?
#include<iostream>
using namespace std;
int main()
{
      int a; // First test's grade
      int b; // Second test's grade
      int c; // Third test's grade
      cout << "What did you get on the first test?";
      cin >> a; // User imputs first test's grade     
        if(a == 100){
            cout << "Thats a perfect grade!";
        }
         else if(100 > a >= 90){
            cout << "That's an A";
         }
         else if(90 > a >= 80){
            cout << "That's a B";
         }
         else if(80 > a >= 70){
            cout << "That's a C";
         }
         else if(70 > a >= 65){
            cout << "That's a D";
         }
         else{
            cout << "That's an F, you failed, better luck next time..." << endl;
         }
      cout << "What did you get in the second test?";
      cin >> b; // User imputs second test's grade
      cout << "What did you get on the third test?";
      cin >> c; // User imputs third test's grade
      int average = (a+b+c)/3; // Calculates average
      cout << "Your test average is :" << average << endl; // Displays average
      return 0;
}





This is the output after putting in the first grade:

What did you get on the first test? 89
That's an F, you failed, better luck next time...
What did you get in the second test?
Last edited on
Try

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  // What grade?
#include<iostream>
using namespace std;
int main()
{
      int a; // First test's grade
      int b; // Second test's grade
      int c; // Third test's grade
      cout << "What did you get on the first test?";
      cin >> a; // User imputs first test's grade     
        if(a == 100)
		{
            cout << "Thats a perfect grade!";
        }
         else if(a >= 90)
		 {
            cout << "That's an A";
         }
         else if(a >= 80)
		 {
            cout << "That's a B";
         }
         else if(a >= 70)
		 {
            cout << "That's a C";
         }
         else if(a >= 65)
		 {
            cout << "That's a D";
         }
         else
		 {
            cout << "That's an F, you failed, better luck next time..." << endl;
         }
      cout << "What did you get in the second test?";
      cin >> b; // User imputs second test's grade
      cout << "What did you get on the third test?";
      cin >> c; // User imputs third test's grade
      int average = (a+b+c)/3; // Calculates average
      cout << "Your test average is :" << average << endl; // Displays average
      return 0;
}
Thanks, it worked! If you don't mind, could you described what you changed?
if (100 > a >= 90)
is not doing what you want it to do. Every comparison operator must stand on its own.
What you actually meant was
if (100 > a && a >= 90)

SamuelAdams simplified the redundant nature of the logic by removing the first condition of each statement.
OK thanks.
Ganado is correct. In the statement, else if(90 > a >= 80), the reason I removed the "90 > a" part is because it was redundant in this case. If you were doing something highly important, you might want to include a check like you tried.

Sometimes less typing is faster but at other times it can get you into trouble.
Another way to write that condition is
if ((100 > a) && (a >= 90))
I may be wrong but personally I think it's safer and easier to debug when combining statements such as this.
Last edited on
 
else if(100 > a >= 90)


Here's what happens with the above code fragment:

1) First 100 > a is evaluated. (Assume a is 89). It returns a true (which is equivalent to 1.)

2) The expression now becomes:

1
2
/// 1 is the equivalent of the true returned by the 1st sub-expression.
else if(1 >= 90)


This evaluates to false.

3) All the if-else expressions similarly evaluate to false.

4) Hence, the else is what gets finally evaluated and an 'F' is printed.
Topic archived. No new replies allowed.