Στην συνέχεια των άρθρων, θα εξετάσουμε τις εντολές υπό συνθήκη, όπου ένα μπλοκ κώδικα εκτελείται ή όχι, εάν μια συνθήκη είναι αληθής ή ψευδής. Για παράδειγμα, ένα πρόγραμμα θα μπορούσε να εξετάζει αν είναι πατημένο ένα μπουτόν και όταν είναι πατημένο να ανάβει το δεξιό LED ενώ όταν δεν είναι να ανάβει το αριστερό LED. Στη C η εκτέλεση προτάσεων υπό συνθήκη μπορεί να γίνει με τις εντολές if και την switch – case.
Η απλή πρόταση if Η σύνταξη της απλής πρότασης if είναι η εξής:
if(συνθήκη) μπλοκ_κώδικα;
Σε αυτή την περίπτωση η if ελέγχει την συνθήκη και αν είναι αληθής εκτελεί το μπλοκ κώδικα και αν η συνθήκη είναι ψευδής εκτελείται το μπλοκ κώδικα αμέσως μετά από την εντολή if.
Στη γλώσσα C η συνθήκη μπορεί να είναι μια λογική παράσταση ή μια οποιαδήποτε παράσταση. Αν η παράσταση επιστρέφει τιμή διάφορη του μηδενός θεωρείται αληθής, ενώ αν επιστρέφει μηδέν θεωρείται ψευδής.

Η πρόταση if – else: Η σύνταξη της πρότασης if – else είναι η εξής:
if(συνθήκη) μπλοκ_κώδικα_Α; else μπλοκ_κώδικα_Β;
Σε αυτή την μορφή, η if ελέγχει την συνθήκη και αν είναι αληθής εκτελεί το μπλοκ_κώδικα_Α που ακολουθεί. Αν η συνθήκη είναι ψευδής εκτελείται το μπλοκ_κώδικα_Β.
Παράδειγμα: Μελετήστε το ακόλουθο απόσπασμα κώδικα:
DDRB=0xFF;
DDRC=0x00;
char a, b=0, c=0;
a=PINC;
if(a==0)
{
PORTB=0x00;
b++;
}
else
{
PORTΒ=0x01;
c++;
}
Η πρόταση if-else if . Αφού μετά από το else μπορεί να υπάρχει οποιαδήποτε πρόταση, αυτή μπορεί να είναι και άλλη μια πρόταση if. Η λογική της πρότασης if – else if φαίνεται στο λογικό διάγραμμα του σχήματος. Το τελευταίο μπλοκ εκτελείται μόνο όταν όλες οι προηγούμενες συνθήκες είναι ψευδής.
if(συνθήκη_1)
Πρόταση_1;
else if(συνθήκη_2)
Πρόταση_2;
else if(συνθήκη_3)
Πρόταση_3;
…
else if(συνθήκη_Ν)
Πρόταση_Ν;
else
Πρόταση_Ψ;
Το λογικό διάγραμμα της πρότασης if – else if είναι το ακόλουθο:

Παρατήρηση: Οι προτάσεις μπορεί να είναι απλές ή σύνθετες
Παράδειγμα: Στο επόμενο πρόγραμμα, ο μικροελεγκτής διαβάζει την τιμή της πόρτας Β και αν η τιμή της είναι 1 ή 2 ή 3 την μεταβιβάζει στην PORTC αυξημένη κατά 10 ή 20 ή 30 αντίστοιχα. Διαφορετικά θέτει την PORTC ίση με 0. Όταν η ροή του προγράμματος φτάσει στην while(1) ο μικροελεγκτής σταματά μόνιμα εκεί.
#include <avr/io.h>
int maid(void)
{
char a;
DDRB=0x00;
DDRC=0xFF;
a=PINB;
if(a==1)
PORTC=a+10;
else if(a==2)
PORTC=a+20;
else if(a==3)
PORTC=a+30;
else
PORTC=0;
while(1);
}
Η πρόταση switch – case
Η πρόταση switch – case ελέγχει αν η τιμή μιας ακέραιας παράστασης ισούται με συγκεκριμένες σταθερές και μόνο με σταθερές. Το συντακτικό της είναι το εξής:
switch(παράσταση)
{
case σταθερά1:
πρόταση;
πρόταση;
…
break;
case σταθερά1:
πρόταση;
πρόταση;
…
break;
default:
πρόταση;
πρόταση;
…
break;
Ανάλογα με τη σταθερά με την οποία ισούται η παράσταση, εκτελούνται οι προτάσεις από την case της συγκεκριμένης σταθεράς μέχρι την επόμενη break. Οι προτάσεις κάτω από την default εκτελούνται μόνο όταν η παράσταση δεν ισούται με καμία από τις σταθερές των προτάσεων case.
Η κάθε case ακολουθείται από μια σταθερά και μια άνω και κάτω τελεία (:) και όχι από ερωτηματικό (;). Οι σταθερές είναι είτε ακέραιες σταθερές είτε σταθερές χαρακτήρα. Δεν επιτρέπεται να είναι συμβολοσειρές ή αριθμοί κινητής υποδιαστολής.
Μελετήστε το ακόλουθο απόσπασμα κώδικα:
DDRB = 0xFF;
DDRC = 0x00;
char a;
a=PINC; //η μεταβλητή a αρχικοποιείται με μια αρχική τιμή
switch(a)
{
case 0x01:
PORTB = 0x10;
break;
case 0x02:
PORTB = 0x20;
break;
default:
PORTB = 0x00;
break;
Στο προηγούμενο απόσπασμα κώδικα, η εντολή break μεταφέρει τον έλεγχο του προγράμματος στην πρόταση αμέσως μετά από την δομή της switch.
Στο απόσπασμα κώδικα που ακολουθεί, αν η μεταβλητή a έχει την τιμή 0x01 θα εκτελεστούν οι προτάσεις ανάθεσης της PORTB τόσο της case 1 όσο και της case 2 μέχρι την πρώτη εντολή break;
switch(a)
{
case 0x01:
PORTB=0x0F;
case 0x02:
PORTD=0xF0;
break;
default:
PORTB=0;
PORTD=0;
break;
}
Ο τελεστής συνθήκης ?:
Με τον τελεστή συνθήκης ?: της γλώσσας C μπορούμε εύκολα να ελέγξουμε μια συνθήκη. Σε κάποιες περιπτώσεις μπορεί να αντικαταστήσει την πρόταση if – else όταν η if συντάσσεται με απλές και με όχι σύνθετες προτάσεις.
Ο τρόπος χρήσης του τελεστή ?: σε μια παράσταση είναι:
Συνθήκη ? παράσταση1 : παράσταση2;
Πρώτα ελέγχεται η Συνθήκη και αν είναι αληθής (διάφορη του 0) τότε υπολογίζεται η παράσταση 1 και το αποτέλεσμα της είναι το αποτέλεσμα όλης της παράστασης. Αν είναι ψευδής (0) τότε υπολογίζεται η παράσταση 2 και το αποτέλεσμα της είναι το αποτέλεσμα όλης της παράστασης. Η Συνθήκη είναι μια λογική παράσταση, αλλά επιτρέπεται να είναι οποιαδήποτε παράσταση. Θεωρείται αληθής αν έχει τιμή διάφορη του μηδενός.
Η παράσταση a = x>y ? k : m; είναι ισοδύναμη με την παρακάτω πρόταση if
if(x>y)
a = k;
else
a = m;