Ce face bool, true, false
O variabilă bool are doar două valori: true (adevărat) și false (fals). Rezultatul unei comparații (nota >= 5) sau al unei expresii logice (a && b) se poate păstra într-un bool.
Istoric, C nu avea tip boolean: se folosea int cu 0 și 1. C99 a adăugat tipul _Bool și antetul <stdbool.h> cu macro-urile bool, true și false. În C23 acestea au devenit cuvinte cheie: merg direct, iar <stdbool.h> nu mai este necesar (se poate include în continuare, fără efect).
La conversia în bool, orice valoare diferită de zero devine true (deci 1), iar 0 devine false. printf nu are un specificator pentru bool: îl afișezi ca număr cu %d sau ca text cu b ? "da" : "nu".
Exemple
Exemplul 1: Admis sau respins
Fără niciun #include <stdbool.h>: în C23 bool, true și false există direct. sizeof(bool) este 1 pe platformele obișnuite.
#include <stdio.h>
int main(void) {
const char *nume[] = {"Ana", "Mihai", "Ioana"};
int note[] = {9, 4, 7};
for (int i = 0; i < 3; i++) {
bool admis = note[i] >= 5;
printf("%-6s nota %2d -> %s\n", nume[i], note[i], admis ? "admis" : "respins");
}
printf("sizeof(bool) = %zu\n", sizeof(bool));
return 0;
}
Rezultat
Ana nota 9 -> admis
Mihai nota 4 -> respins
Ioana nota 7 -> admis
sizeof(bool) = 1
Exemplul 2: Conversia numerelor în bool
Orice număr nenul devine true (afișat ca 1), chiar și 42 sau -3. Un int ar fi păstrat valoarea originală; bool o reduce la 0 sau 1.
#include <stdio.h>
int main(void) {
int valori[] = {0, 1, 42, -3};
for (int i = 0; i < 4; i++) {
bool b = valori[i];
printf("%3d -> %d\n", valori[i], b);
}
printf("true + true = %d\n", true + true);
return 0;
}
Rezultat
0 -> 0
1 -> 1
42 -> 1
-3 -> 1
true + true = 2
Exemplul 3: Funcție care returnează bool
O funcție care răspunde „da” sau „nu” returnează bool. Bucla se oprește la primul număr par găsit, cu ajutorul variabilei gasit.
#include <stdio.h>
static bool este_par(int n) {
return n % 2 == 0;
}
int main(void) {
int stocuri[] = {7, 13, 20, 5};
bool gasit = false;
for (int i = 0; i < 4 && !gasit; i++) {
if (este_par(stocuri[i])) {
printf("Primul stoc par: %d (poziția %d)\n", stocuri[i], i);
gasit = true;
}
}
if (!gasit) {
printf("Niciun stoc par\n");
}
return 0;
}
Rezultat
Primul stoc par: 20 (poziția 2)
Greșeli frecvente
- Compari explicit cu
true:if (gasit == true). Pentru unboolmerge, dar pentru unintfolosit ca boolean (de exemplu 2) comparația este falsă. Scrie simpluif (gasit). - Te aștepți ca
boolsă afișeze „true” cuprintf. Nu există%bpentru asta; folosește%dsau operatorul?:. - Compilezi cod C23 cu un standard mai vechi (
-std=c11): acoloboolexistă doar după#include <stdbool.h>. Dacă proiectul trebuie să meargă și cu C99/C11, păstrează includerea.
Comenzi înrudite
Operatori de comparație și logici (== && || ! ?:): Compară valori și combină condiții: rezultatul este 1 (adevărat) sau 0 (fals); && și || se opresc cât mai devreme.if / else: Execută un bloc de cod doar dacă o condiție este adevărată, cu ramuri alternative pentru celelalte cazuri.Tipuri de date (int, char, double): Tipurile de bază din C: întregi (char, short, int, long, long long), cu sau fără semn, și numere reale (float, double).nullptr: Constanta C23 pentru pointerul nul, cu tip propriu (nullptr_t), mai sigură decât NULL sau 0.printf: Afișează text formatat pe ecran: un șablon cu specificatori (%d, %s, %.2f) completați cu valorile primite după el.
Întrebări & Exemple de Cod:
bool, true, falseAi o nelămurire despre utilizarea comenzii
bool, true, falsesau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.