# Erorile frecvente în C++ și cum le eviți

> Pagina: https://bacalaurescu.ro/informatica/lectii/elemente-de-baza-cpp/erori-frecvente-cpp
> Markdown: https://bacalaurescu.ro/informatica/lectii/elemente-de-baza-cpp/erori-frecvente-cpp.md
> Sursa: Bacalaurescu (bacalaurescu.ro), conținut gratuit pentru BAC 2027.

Materia: [Informatică](https://bacalaurescu.ro/informatica)

Capitolul: [Limbajul C++: elemente de bază](https://bacalaurescu.ro/informatica/lectii/elemente-de-baza-cpp)
Actualizat: 2026-11-01

Cele mai comune greșeli de compilare și de logică din lucrările de BAC.

## Pe scurt pentru BAC

- Erorile de compilare împiedică pornirea programului, iar cele de logică îl lasă să ruleze, dar cu rezultate greșite.
- C++ face diferența între litere mari și mici, deci `nr` și `Nr` sunt variabile diferite.
- Fiecare funcție își cere biblioteca: `cin/cout` cer `<iostream>`, `strlen` cere `<cstring>`, iar `sqrt` cere `<cmath>`.
- `if (x = 5)` atribuie 5 lui x și face condiția mereu adevărată, pe când comparația corectă este `if (x == 5)`.
- Bucla `while (n != 0)` fără modificarea lui `n` în corp nu se termină niciodată.

## Erori de COMPILARE (programul nu pornește)

**1. Punct și virgulă lipsă.** Fiecare instrucțiune se termină cu `;`. Eroarea apare de regulă pe RÂNDUL URMĂTOR celui greșit.

**2. Variabile nedeclarate sau scrise diferit.** `nr` și `Nr` sunt variabile DIFERITE: C++ face diferența între litere mari și mici.

**3. Acolade neînchise.** Fiecare `{` are perechea ei `}`. Aliniază-le vizual ca să le verifici rapid.

**4. Biblioteci lipsă.** `cin/cout` cer `#include <iostream>` (+ `using namespace std;`), `strlen` cere `<cstring>`, `sqrt` cere `<cmath>`.

## Erori de LOGICĂ (compilează, dar dă rezultate greșite)

**1. `=` în loc de `==`.** `if (x = 5)` ATRIBUIE 5 lui x (condiția devine mereu adevărată); comparația corectă e `if (x == 5)`.

**2. Împărțirea întreagă.** `5 / 2` dă `2`, nu 2,5: la întregi, rezultatul e întreg. Pentru medie reală: `(a + b) / 2.0`.

**3. Depășirea vectorului.** La `int v[10]`, indicii valizi sunt 0-9; `v[10]` e în afara vectorului (comportament imprevizibil, fără mesaj clar).

**4. Bucla infinită.** `while (n != 0)` fără modificarea lui `n` în corp nu se termină niciodată.

**5. int prea mic.** Pentru valori peste ~2 miliarde folosește `long long` (produsul a două int-uri mari depășește int).

## Exemplu: găsește cele 3 erori

```cpp
#include <iostream>
using namespace std;
int main() {
    int n
    cin >> n;
    if (n = 10)
        cout << "zece"
    return 0;
}
```

Erorile: lipsă `;` după `int n`; `=` în loc de `==` în if; lipsă `;` după `cout`.

> [!ATENTIE]
> La subiectele de tip "corectați secvența", cele mai frecvente capcane sunt exact acestea: ; lipsă, = în loc de ==, împărțirea întreagă. Caută-le PRIMELE.

> [!RETINE]
> Primele capcane de căutat: `;` lipsă, `=` în loc de `==` și împărțirea întreagă (`5 / 2` dă `2`; pentru zecimale scrie `(a + b) / 2.0`). La `int v[10]` indicii valizi sunt de la 0 la 9.

## Greșeli frecvente

1. Mesajul de eroare arată deseori rândul de DUPĂ greșeală: verifică și rândul anterior.
2. `5/2 = 2` la întregi: adaugă .0 sau folosește float/double când vrei zecimale.
3. Citirea cu `cin >> s` se oprește la spațiu: pentru texte cu spații folosește `cin.getline`.
