Conditional Statements and Loops

Requirements

Linux Distribution (obviously)
A text editor :
Vim, Emacs, gedit, kate, atom
A Compiler :
gcc or clang
A Shell:
bash, xterm, sh,

My setup for this tutorial:

Debian GNU/Linux 9.4
Atom (Text editor)
gcc version 6.3.0-18+deb9u1 (Debian’s Release version for Debian 9.1)
bash

Conditional statements are a way for the program to branch and do different
things depending on a variable’s value. We do this through if/else statements
or switch statements.

If/else statements:

If/else statements are used for specific variable condition checking as well
as multiple variable checking. It is declared as such:
[sourcecode language=’cpp’]
if(condition){
//code goes here
}else{
//other code here
}
[/sourcecode]
For multiple branching you can do else-if statements

[sourcecode language=’cpp’]
if(first condition){
//code goes here
}else if(second condition){
//code goes here
}else{
//other code here
}
[/sourcecode]
Also they can be nested as such:

[sourcecode language=’cpp’]
if(condition){
if(condition){
//code goes here
}else{
//other code here
}
}else{
//other code here
}
[/sourcecode]

Lets create go back to our main.c

[sourcecode language=’cpp’]
#include <stdio.h>

int multiply(int a , int b);
void swap(int * a, int * b);

int main(int argc,char * argv[]){

int foo = 42;
int bar = 3;

printf(“Hello World!\n”);
if(foo < bar){
printf("Printing bar: %d\n",bar);
}else{
printf("Printing foo: %d\n",foo);
}
printf("Multiplying the two: %d\n",multiply(foo,bar));
swap(&foo,&bar);

return 0;

}

int multiply(int a , int b){
return a * b;
}

void swap(int * a , int * b){
int temp = *a;
*a = *b;
*b = temp;
}
[/sourcecode]

If you recompile this, and see the result. It should print :

Hello World
Printing foo: 42
Multiplying the two : 126

This is because it the program skips over the printf("Printing bar: 3")
because foo is greater then bar. As long as the condition within the if statement
returns true, the branch executes.

Switches:

Sometimes you only need to check one variable multiple times. Using an if/
else if/else statemenc can become pretty redundant, so instead you can use a
switch statement. You declare them with the following:

[sourcecode language=’cpp’]
switch( variable ){
case VARIABLE_CASE_1 :
//code goes here
break;
case VARIABLE_CASE_2 :
//code goes here
break;
case VARIABLE_CASE_3 :
//code goes here
break;
default case:
//Default case here
break;
}
[/sourcecode]
If variable = VARIABLE_CASE_1, the first block executes until the break
keyword. Lets give a real example:

[sourcecode language=’cpp’]
#define ROCK 1
#define PAPER 2
#define SCISSORS 3
[/sourcecode]
Defining constants like such allow you to use hardcoded constants as case
statements. Since the use of the const keyword doesn’t give a compile-time constant variable ( a variable that can’t change its value through out the lifetime of the program), and case statements require a constant expression, we use these defines as values.
[sourcecode language=’cpp’]
int input;
printf(“Pick 1. Rock,2. Paper, or 3. Scissors”);
scanf(“%d”, &input);

switch(input){
case ROCK:
printf(“You picked Rock”)
break;
case PAPER:
printf(“You picked Paper”);
break;
case SCISSORS:
printf(“You picked Scissors”);
break;
default case:
printf(“You failed to pick a valid input”);
break;
}
[/sourcecode]
The scanf function is a formatted input function. It takes in a const char pointer (in C, const char * is a string), and the address of the variables you want to put values into. The full program:

[sourcecode language=’cpp’]
#include <stdio.h>

#define ROCK 1
#define PAPER 2
#define SCISSORS 3

int main(int argc,char *argv[]){

int input;
printf(“Pick 1. Rock,2. Paper, or 3. Scissors”);
scanf(“%d”, &input);

switch(input){
case ROCK:
printf(“You picked Rock”);
break;
case PAPER:
printf(“You picked Paper”);
break;
case SCISSORS:
printf(“You picked Scissors”);
break;
default:
printf(“You failed to pick a valid input”);
break;
}

return 0;
}

[/sourcecode]
Depending on your answer , it will pick the specific branch needed, and then break out of the switch statement.

Loops:

Loops are a simple concept in C, you do the required block of code for a certain amount of times. There is multiple ways to do this.

While loops:
these are declared:

[sourcecode language=’cpp’]
while( condition ){
//insert code here
}
[/sourcecode]
If the condition is false , the block will not execute, however if you need
a loop to be ran at least once, you can use the next type of loop

[sourcecode language=’cpp’]
do{
//insert code here
}while( condition )
[/sourcecode]
This loop will run atleast once , and then continue to run until the while
condition is true.

[sourcecode language=’cpp’]
for(initialization; condition; increment){
//do code here
}
[/sourcecode]
The for loop is a little different then the others. While the others require
the variable within the condition to be declared already, the for loop does that
within the parameters. Say i wanted to increment through an array of integers:

[sourcecode language=’cpp’]
int arr[5] = { 1,2,3,4,5};
[/sourcecode]
I can do something along the lines of:
[sourcecode language=’cpp’]
for(unsigned int i = 0;i < 5; i++){
printf("Array value at %d : %d\n", i , arr[i]);
}
[/sourcecode]

What this will do is set up a temporary unsigned integer named i and assign it
to a value of 0, then print the array at value at i .

Leave a Reply