Ce face if, else
if evaluează condiția dintre paranteze. Dacă este adevărată (true sau un număr diferit de 0), se execută blocul dintre acolade. Altfel, se execută blocul de după else, dacă există. Cu else if poți înlănțui mai multe condiții; se execută doar prima ramură adevărată.
Din C++17, if poate avea o inițializare înainte de condiție, separată prin ;. Variabila declarată acolo există doar în interiorul lui if și else, ceea ce ține codul curat.
Pentru o alegere simplă între două valori există operatorul ternar: conditie ? valoare_da : valoare_nu.
Exemple
Exemplul 1: Calificativul după notă
#include <print>
void calificativ(int nota) {
if (nota >= 9) {
std::println("{}: Foarte bine", nota);
} else if (nota >= 7) {
std::println("{}: Bine", nota);
} else if (nota >= 5) {
std::println("{}: Suficient", nota);
} else {
std::println("{}: Insuficient", nota);
}
}
int main() {
calificativ(10);
calificativ(7);
calificativ(4);
}
Rezultat
10: Foarte bine
7: Bine
4: Insuficient
Exemplul 2: if cu inițializare (C++17)
it este vizibil doar în if și în else, deci nu „poluează” restul funcției.
#include <map>
#include <print>
#include <string>
int main() {
std::map<std::string, double> preturi = {{"pâine", 4.5}, {"lapte", 7.2}};
for (const std::string produs : {"lapte", "cafea"}) {
if (auto it = preturi.find(produs); it != preturi.end()) {
std::println("{} costă {} lei", produs, it->second);
} else {
std::println("{} nu este în listă", produs);
}
}
}
Rezultat
lapte costă 7.2 lei
cafea nu este în listă
Exemplul 3: Operatorul ternar
#include <print>
int main() {
int bucati = 1;
std::println("Ai {} {}", bucati, bucati == 1 ? "produs" : "produse");
bucati = 3;
std::println("Ai {} {}", bucati, bucati == 1 ? "produs" : "produse");
}
Rezultat
Ai 1 produs
Ai 3 produse
Greșeli frecvente
- Scrii
if (x = 5)în loc deif (x == 5). Atribuirea face condiția mereu adevărată și schimbăx. - Pui punct și virgulă după condiție:
if (stoc > 0); { ... }.;este un bloc gol, deci acoladele se execută întotdeauna. - Omiți acoladele și adaugi mai târziu o a doua linie. Doar prima linie ține de
if; cealaltă se execută mereu. Pune acolade întotdeauna.
Comenzi înrudite
switch, case, default: Alege una dintre mai multe ramuri după valoarea unei expresii întregi, a unui caracter sau a unui enum.if constexpr: Un if evaluat la compilare: ramura falsă este eliminată complet, deci poate conține cod care nu s-ar compila pentru tipul curent.bool, true, false: Tipul logic: o variabilă bool are doar două valori, true (adevărat) sau false (fals).and, or, not și ceilalți operatori alternativi: Cuvinte care pot înlocui simbolurile unor operatori: and pentru &&, or pentru ||, not pentru !, bitand pentru & și altele.