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:
if(condition){ //code goes here }else{ //other code here }
For multiple branching you can do else-if statements
if(first condition){ //code goes here }else if(second condition){ //code goes here }else{ //other code here }
Also they can be nested as such:
if(condition){ if(condition){ //code goes here }else{ //other code here } }else{ //other code here }
Lets create go back to our main.c
#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; }
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:
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; }
If variable = VARIABLE_CASE_1, the first block executes until the break
keyword. Lets give a real example:
#define ROCK 1 #define PAPER 2 #define SCISSORS 3
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.
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; }
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:
#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; }
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:
while( condition ){ //insert code here }
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
do{ //insert code here }while( condition )
This loop will run atleast once , and then continue to run until the while
condition is true.
for(initialization; condition; increment){ //do code here }
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:
int arr[5] = { 1,2,3,4,5};
I can do something along the lines of:
for(unsigned int i = 0;i < 5; i++){ printf("Array value at %d : %d\n", i , arr[i]); }
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 .