Break and Continue
Buclele for și while își fac treaba de la început până la sfârșit. Dar dacă, în mijlocul unei bucle, vrem să spunem „ok, e suficient, oprește-te"? Sau „sari peste asta, treci la următoarea"?
C ne oferă două cuvinte cheie pentru asta: break și continue
break oprește bucla complet. Iterațiile rămase nu se mai întâmplă
#include <stdio.h>
int main(void) {
for (int i = 0; i < 100; i++) {
if (i == 5) {
break;
}
printf("%d\n", i);
}
return 0;
}
Ieșire
0
1
2
3
4
I-am spus buclei să meargă până la 99, dar de îndată ce i a devenit 5, break a intrat în acțiune și bucla s-a terminat
Un exemplu real: căutarea unei valori într-un array
#include <stdio.h>
int main(void) {
int valori[] = { 10, 25, 7, 42, 13 };
int n = sizeof(valori) / sizeof(valori[0]);
int tinta = 42;
for (int i = 0; i < n; i++) {
if (valori[i] == tinta) {
printf("Am gasit %d la pozitia %d\n", tinta, i);
break;
}
printf("Verific %d...\n", valori[i]);
}
return 0;
}
Bucla se oprește de îndată ce găsim ce căutăm. break ne economisește timp
continue este diferit. Nu oprește bucla, doar sare peste restul iterației curente și trece la următoarea
#include <stdio.h>
int main(void) {
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue;
}
printf("%d\n", i);
}
return 0;
}
Ieșire
0
1
2
3
4
6
7
8
9
5 lipsește. Când i a fost 5, continue a sărit peste printf și bucla a continuat
Un exemplu real: afișează doar numerele pare
#include <stdio.h>
int main(void) {
for (int i = 0; i <= 10; i++) {
if (i % 2 != 0) {
continue;
}
printf("%d\n", i);
}
return 0;
}
Output: 0 2 4 6 8 10
Ambele cuvinte cheie funcționează la fel în while, nu doar în for
#include <stdio.h>
int main(void) {
int i = 0;
while (1) { // tine minte: 1 este "true" in C
if (i >= 5) {
break;
}
printf("%d\n", i);
i++;
}
return 0;
}
while (1) ar fi în mod normal infinit, dar break ne lasă să scăpăm
O mică avertizare: break și continue pot face codul mai greu de citit dacă abuzezi de ele. Folosește-le când fac logica mai clară, nu doar ca să pară cod deștept
Misiune: Inspecția sălii de cartele perforate
Faci inspecția anuală a sălii cu cititoare de cartele perforate, numerotate de la 1 la 20. Un cititor este marcat ca sigilat pentru reparații: trebuie sărit cu continue, fără să-l afișezi. Un alt cititor declanșează alarma de fum: de îndată ce ajungi la el, oprești inspecția cu break (fără să-l afișezi nici pe el).
- Citește două numere întregi din input: sigilat și alarma
- Parcurge cititoarele de la 1 la 20 cu o buclă for
- Dacă numărul curent este egal cu sigilat, sari peste el cu continue
- Dacă numărul curent este egal cu alarma, oprește bucla cu break
- Altfel, afișează numărul cititorului
Exemplu
Intrare
13 17
Ieșire
1
2
3
4
5
6
7
8
9
10
11
12
14
15
16
Exemplu
Intrare
5 10
Ieșire
1
2
3
4
6
7
8
9