Follow

Follow

# Conditions and loops (6)

Antonin Hérault
·Jul 12, 2022·

• Conditions
• Loops
• Exercises
• Solutions

There are some instructions to control your code, you can manage things thanks to the conditions and the loops.

## Conditions

In this article we saw the boolean operators. A boolean expression always returns a value : `1` for true and `0` for false.

The `if` condition takes a boolean expression and execute the following code when it's true.

``````if (5 >= 2) {
printf("Five is greater than two\n");
}
``````
``````Five is greater than two
``````

The condition was checked as valid, so the code was executed.

``````if (5 <= 2) {
printf("Two is greater than five\n");
}
``````

There will be no output because the condition is invalid, the code was not executed.

Also, we can create an `else` case.

``````if (false) {
printf("This log will never be seen\n");
} else {
printf("Hey !\n");
}
``````
``````Hey !
``````

As well as we can create `else if` cases.

``````if (0) {
printf("1: This log will never be seen\n");
} else if (0) {
printf("2: This log will never be seen\n");
} else if (1) {
printf("3: Hey!\n");
} else {
printf("4: This log will never be seen\n");
}
``````
``````3: Hey !
``````

### Conditions and defensive programming

Alright, this is simple. There is a programming way that I would like to teach you. It's a part of the "defensive programming" principle.

To avoid having too many cases following an `if` expression, we return when the expression works.

``````#include <stdio.h>

int check(int a, int b) {
if (a != b) {
printf("a and b are different\n");
return 1;
}

if (a > b) {
printf("a is greater than b\n");
return 1;
}

if (a < b) {
printf("a is less than b\n");
return 1;
}

printf("a and b are the same\n");
return 0;
}
``````

If you don't care about specific prints :

``````#include <stdio.h>

int check(int a, int b) {
if (a != b) {
printf("a and b are not the same\n");
return 1;
}

printf("a and b are the same\n");
return 0;
}
``````

## Loops

In programming, a loop is a way to repeat a code block while a boolean expression is true.

``````while (1) {
printf("Pete and Repeat were on a boat. Pete fell out, who was left on the boat?\n");
printf("Repeat...");
}
``````
``````Pete and Repeat were on a boat. Pete fell out, who was left on the boat?
Repeat...
Pete and Repeat were on a boat. Pete fell out, who was left on the boat?
Repeat...
...
``````

My program won't stop ! How to stop it ?

For every running program, in your terminal you can press CTRL + c then the program will be cancelled.

In the C language, we can use two different loops :

``````while (<boolean expression>) {
<?instructions...>
}
``````
``````for (<set variable>; <boolean expression>; <update variable>) {
<?instructions...>
}
``````

And they are two keywords to manage the loop :

• `break` : To stop the loop at this point
• `continue` : To ignore the code below and continue the loop at this point

### Loop example for arrays

``````#include <stdio.h>

int main(void) {
int values[4] = {4, 2, 9, 1};

for (int i = 0; i < 4; ++i) {
printf("values[%i] == %i\n", i, values[i]);
}

return 0;
}
``````
``````values[0] == 4
values[1] == 2
values[2] == 9
values[3] == 1
``````

We create an iterator named `i`. The loop lives while `i` is less than `4`. For each round, the variable iterator is incremented by 1.

``````for (int i = 0; i < 4; ++i) {}
``````

Is the same as

``````int i = 0;
while (i < 4) {
++i;
}
``````

And

``````int i = 0;
while (1) {
if (i >= 4) {
break;
}
++i;
}
``````

## Exercises

1. Create a function telling if the parameter is odd or even
2. Walk through an array and multiply each element by two
3. Create a guessing program for a magic number. It takes the number from the command line parameters. We will use the `int atoi(char[] string)` function from `<stdlib.h>` to convert a string into an integer

## Solutions

1. Create a function telling if the parameter is odd or even

``````void odd_or_even(int x) {
if (x % 2 == 0) {
printf("%i is even\n", x);
} else {
printf("%i is odd\n", x);
}
}
``````
2. Walk through an array and multiply each element by two

`````` int main(void) {
int values[3] = {6, 8, 10};
for (int i = 0; i < 3; ++i) {
values[i] *= 2;
}

return 0;
}
``````
3. Create a guessing program for a magic number

`````` #include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
int input = atoi(argv[1]);
int magic_number = 78;

if (input < magic_number) {
printf("It's greater\n");
} else if (input > magic_number) {
printf("It's less\n");
} else {
printf("You win !\n");
}

return 0;
}
``````

Or with the defensive programming principle :

`````` #include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
int input = atoi(argv[1]);
int magic_number = 78;

if (input < magic_number) {
printf("It's greater\n");
return 1;
}

if (input > magic_number) {
printf("It's less\n");
return 1;
}

printf("You win !\n");
return 0;
}
``````

This program is not really good. Later we will see how to ask the user a number in the command shell and we will create a loop to avoid restarting the program for each tentative. I also said we will use the `int atoi(char[] string)` function from `<stdlib.h>` to convert a string into an integer, but it's a bad function because if the string doesn't represent a number, the result will be weird. Later, we will see the right functions to use for these cases.