Fluxul de cod condiționat este abilitatea de a schimba modul în care o bucată de cod se comportă în funcție de anumite condiții. În astfel de situații puteți folosi if declarații.

if declarația este, de asemenea, cunoscută sub numele de declarație de luare a deciziilor, deoarece ia o decizie pe baza unei condiții sau a unei expresii date. Blocul de cod din interiorul if declarația este executată este condiția evaluată ca fiind adevărată. Cu toate acestea, codul din interiorul acoladelor este omis dacă condiția este evaluată ca fiind falsă, iar codul după if declarația este executată.

Sintaxa unui if afirmație

if (testCondition) {
   // statements
}

Un exemplu simplu

Să vedem un exemplu de acest lucru în acțiune:

#include <stdio.h>
#include <stdbool.h>

int main(void) {
    if(true) {
        printf("Statement is True!n");
    }

    return 0;
}

Ieșire:

Statement is True!

Dacă codul din paranteză al if declarația este adevărată, totul în interiorul acoladelor este executat. În acest caz, true se evaluează la adevărat, deci codul execută printf funcţie.

if..else declarații

Într-un if...else declarație, dacă codul din paranteză al fișierului if declarația este adevărată, codul din paranteze este executat. Dar dacă afirmația din paranteză este falsă, tot codul din else parantezele instrucțiunii sunt executate în schimb.

Desigur, exemplul de mai sus nu este foarte util în acest caz deoarece true întotdeauna evaluează la adevărat. Iată un altul puțin mai practic:

#include <stdio.h>

int main(void) {
    int n = 2;

    if(n == 3) { // comparing n with 3
        printf("Statement is True!n");
    } 
    else { // if the first condition is not true, come to this block of code
        printf("Statement is False!n");
    }

    return 0;
}

Ieșire:

Statement is False!

Există câteva diferențe importante aici. Primul, stdbool.h nu a fost inclus. Este în regulă pentru că true și false nu sunt folosite ca în primul exemplu. În C, ca și în alte limbaje de programare, puteți utiliza instrucțiuni care se evaluează la adevărat sau fals, mai degrabă decât să utilizați valorile booleene true sau false direct.

De asemenea, observați starea din paranteză a if afirmație: n == 3. Această condiție se compară n iar numărul 3. == este operatorul de comparație și este una dintre mai multe operații de comparație din C.

Cuibărit if...else

if...else afirmația permite alegerea între două posibilități. Dar uneori trebuie să alegeți între trei sau mai multe posibilități.

De exemplu, funcția de semn în matematică returnează -1 dacă argumentul este mai mic decât zero, +1 dacă argumentul este mai mare decât zero și returnează zero dacă argumentul este zero.

Următorul cod implementează această funcție:

if (x < 0)
   sign = -1;
else
   if (x == 0)
      sign = 0;
   else
      sign = 1;

După cum puteți vedea, o secundă if...else declarația este imbricată în else declarație a primei if..else.

Dacă x este mai mic decât 0, atunci sign este setat la -1. Cu toate acestea, dacă x nu este mai mic de 0, al doilea if...else declarația este executată. Acolo, dacă x este egal cu 0, sign este setat și la 0. Dar dacă x este mai mare decât 0, sign este în schimb setat la 1.

Mai degrabă decât un cuibărit if...else declarație, începătorii folosesc adesea un șir de if declarații:

if (x < 0) {
   sign = -1;
}
   
if (x == 0) {
   sign = 0;
}
   
if (x > 0) {
   sign = 1;
}

În timp ce acest lucru funcționează, nu este recomandat, deoarece nu este clar că doar una dintre declarațiile de atribuire (sign = ...) este menit a fi executat în funcție de valoarea lui x. De asemenea, este ineficient – de fiecare dată când rulează codul, toate cele trei condiții sunt testate, chiar dacă una sau două nu trebuie să fie.

altfel … dacă afirmații

if...else declarațiile sunt o alternativă la un șir de if declarații. Luați în considerare următoarele:

#include <stdio.h>

int main(void) {
    int n = 5;

    if(n == 5) {
        printf("n is equal to 5!n");
    } 
    else if (n > 5) {
        printf("n is greater than 5!n");
    }

    return 0;
}

Ieșire:

n is equal to 5!

Dacă condiția pentru if declarația evaluează la fals, condiția pentru else...if declarația este verificată. Dacă acea condiție este evaluată la adevărat, codul din else...if acoladele de declarație sunt rulate.

Operatori de comparație

Numele operatoruluiUtilizareRezultat
Egal cua == bAdevărat dacă a este egal cu b, fals altfel
Nu este egal cua != bAdevărat dacă a nu este egal cu b, fals altfel
Mai mare caa > bAdevărat dacă a este mai mare decât b, fals altfel
Mai mare sau egal cua >= bAdevărat dacă a este mai mare sau egal cu b, fals altfel
Mai puțin decâta < bAdevărat dacă a e mai puțin decât b, fals altfel
Mai mic sau egal cua <= bAdevărat dacă a este mai mic sau egal cu b, fals altfel

Operatori logici

Am putea dori să ruleze un pic de cod dacă ceva nu este adevărat sau dacă două lucruri sunt adevărate. Pentru aceasta avem operatori logici:

Numele operatoruluiUtilizareRezultat
Nu (!)!(a == 3)Adevărat dacă a este nu egal cu 3
Și (&&)a == 3 && b == 6Adevărat dacă a este egal cu 3 și b este egal cu 6
Sau (||)a == 2 || b == 4Adevărat dacă a este egal cu 2 sau b este egal cu 4

De exemplu:

#include <stdio.h>

int main(void) {
    int n = 5;
    int m = 10;

    if(n > m || n == 15) {
        printf("Either n is greater than m, or n is equal to 15n");
    } 
    else if( n == 5 && m == 10 ) {
        printf("n is equal to 5 and m is equal to 10!n");
    } 
    else if ( !(n == 6)) {
        printf("It is not true that n is equal to 6!n");
    }
    else if (n > 5) {
        printf("n is greater than 5!n");
    }

    return 0;
}

Ieșire:

n is equal to 5 and m is equal to 10!

O notă importantă despre comparațiile C

Deși am menționat mai devreme că fiecare comparație verifică dacă ceva este adevărat sau fals, dar asta este doar pe jumătate adevărat. C este foarte ușor și aproape de hardware-ul pe care rulează. Cu hardware-ul este ușor să verificați dacă ceva este 0 sau fals, dar orice altceva este mult mai dificil.

În schimb, este mult mai precis să spunem că comparațiile verifică cu adevărat dacă ceva este 0 / fals sau dacă este orice altă valoare.

De exemplu, afirmația lui if este adevărată și validă:

if(12452) {
    printf("This is true!n")
}

Prin proiectare, 0 este fals și, prin convenție, 1 este adevărat. De fapt, iată o privire asupra stdbool.h bibliotecă:

#define false   0
#define true    1

Deși există ceva mai mult, acesta este nucleul modului în care funcționează booleenii și modul în care funcționează biblioteca. Aceste două linii instruiesc compilatorul să înlocuiască cuvântul false cu 0 și true cu 1.