C++: If and Else Statements

So we've learnt how to collect basic data from the user, but wouldn't it be useful if we could do different things depending on what the user typed in? Well this happens to be a very core concept of computer programming, and we can do exactly as previously described with these things called 'if' statements. These are basic statements which allow us to do certain things only in certain conditions.

The first thing we're going to learn about is the 'if' itself. Just write the if keyword and then in some brackets, the condition. To specify the condition you simply write one value (either a variable or constant), then the comparison operator you want to compare them with (for example - equal to, which is ==) and then the second value (either a variable or constant). We then put some curly brackets, and anything inside the curly brackets is what will be executed if the condition is true. For example, the following would compare 1 to 1 (which is a bit silly, but gives an example which is obviously always true):

1
2
3
4
if(1 == 1)
{
	//Stuff to do if the condition is true (which in this case, it always is! 1 is always 1!)
}

Note that the value that you are comparing the second thing to must match the type of the first thing - for example, if comparing a string you must either compare to a string variable, or to a string constant (and remember that string constants are always shown in double quotes). In our example, however, one always equals one, so it's not much of a condition -- we can use variables to actually create a somewhat useful condition:

1
2
3
4
5
6
7
int age;
cin >> age;

if(age == 16)
{
	cout << "Wow, I'm 16 too!";
}

In this case the program would output "Wow, I'm 16 too!" if the user entered the value 16, but would not output anything if the user inputted any other number. We can also compare any two variables using the same method:

1
2
3
4
5
6
7
8
9
int age, height;

cin >> age;
cin >> height;

if(age == height)
{
	cout << "Your age and height are the same!";
}

The issue we have at the moment, is that in most programs we aren't always going to want to just check if something is equal to something else. What if we wanted to check if something was less than, or greater than, or not equal to something else? Well luckily there are other comparison operators we can use instead of just being restricted to the "is equal to" operator (==). "Less Than" (<) and "Greater Than" (>) are relatively simple - they are simply their usual symbols, and so we could check if the user's height is greater than their age like this:

1
2
3
4
5
6
7
8
9
int age, height;

cin >> age;
cin >> height;

if(height > age)
{
	cout << "Your height is greater than your age!";
}

We can also do "Greater Than or Equal To" and "Less Than or Equal To" by simply adding a single equals sign after the appropriate symbol. For example, we could check if the user's height was less than or equal to their age like this:

1
2
3
4
5
6
7
8
9
int age, height;

cin >> age;
cin >> height;

if(height <= age)
{
	cout << "Your height is less than or equal to your age!";
}

There are also the simple "equal to" and "not equal to" conditional operators. We already know "equal to" as ==, and "not equal to" is an exclamation mark followed by an equals sign: !=. So we could check if the user's height doesn't equal their age like so:

1
2
3
4
5
6
7
8
9
int age, height;

cin >> age;
cin >> height;

if(height != age)
{
	cout << "Your height doesn't equal your age!";
}

Ok, so now that we can compare two values pretty well - what if we want to do a variety of things depending on different conditions? For example if we wanted to do one thing if their height and age were equal, and if they aren't then do something else if another condition is met. Well we can accomplish this using 'else if'. You can just write else if after your closing curly bracket for your original 'if' statement, and then specify your 'else if' condition followed by the curly brackets to contain the code to be executed if they are met. For example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int age, height;

cin >> age;
cin >> height;

if(height == age)
{
	cout << "Your height is equal to your age!";
}
else if(height < age)
{
	cout << "Your height is less than your age!";
}
else if(height > age)
{
	cout << "Your height is greater than your age!";
}

Notice that it's very easy just to string together 'if's and 'else if's, in this case I've just chained two 'else if's off my original 'if'. We can also specify something to do if none of the conditions are met (in our example above this wouldn't really be useful since it's impossible not to meet any of the conditions, but it's generally good practice to put an else in just in case something goes seriously wrong). We can do this using the else keyword, and then some curly brackets to specify the code that could be executed at the end of our "daisy chain":

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int age, height;

cin >> age;
cin >> height;


if(height == age)
{
	cout << "Your height is equal to your age!";
}
else if(height < age)
{
	cout << "Your height is less than your age!";
}
else if(height > age)
{
	cout << "Your height is greater than your age!";
}
else
{
	cout << "Something has gone seriously wrong here!";
}

A great example of "daisy chaining" these all up is to create a program which asks for a student's test score, and then spits out the grade that they got. Try and create such an application yourself and see how you do. One solution to the problem is as follows, however it's worth noting that repeating this much code should be making your "bad code" sense tingle! It goes against the "Don't Repeat Yourself" principle of programming, but for now, a solution like this will have to do:

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
43
44
45
46
47
#include <iostream>

using namespace std;

int main(){
    int mark;
    cout << "What mark did you get in the test?" << endl;
    cin >> mark;

    if(mark >= 90)
    {
            cout << "You got an A*" << endl;
            cout << "You Passed!" << endl;
    }
    else if(mark >= 80)
    {
            cout << "You got an A" << endl;
            cout << "You Passed!" << endl;
    }
    else if(mark >= 70)
    {
            cout << "You got an B" << endl;
            cout << "You Passed!" << endl;
    }
    else if(mark >= 60)
    {
            cout << "You got an C" << endl;
            cout << "You Passed!" << endl;
    }
    else if(mark >= 50)
    {
            cout << "You got an D" << endl;
            cout << "You Failed!" << endl;
    }
    else if(mark >= 40)
    {
            cout << "You got an E" << endl;
            cout << "You Failed!" << endl;
    }
    else
    {
            cout << "You got an U" << endl;
            cout << "You Failed!" << endl;
    }

    return 0;
}