Kurs C++: Pętle i Iteracje

Pętla nieskończona to pętla, która nigdy nie kończy swojej pracy, ponieważ warunek jej zakończenia nigdy nie jest spełniony. W praktyce pętle tego typu są często stosowane w programowaniu, ale muszą być odpowiednio kontrolowane, aby uniknąć błędów i nadmiernego zużycia zasobów systemowych.


1. Składnia pętli nieskończonej

W C++ najczęściej spotykane formy pętli nieskończonej to:

a) Pętla while z warunkiem true

while (true) {
    // Kod wykonywany nieskończenie
}

b) Pętla for bez warunków zakończenia

for (;;) {
    // Kod wykonywany nieskończenie
}

📌 Obie wersje działają identycznie, ale pętla while(true) jest bardziej czytelna w kontekście nieskończonych pętli.


2. Zastosowania pętli nieskończonej

1. Serwery i aplikacje działające w tle

Serwery (np. serwer HTTP, serwer gier) muszą działać nieprzerwanie i czekać na nowe żądania użytkowników.

Przykład: Prosty symulator serwera

#include <iostream>
using namespace std;

int main() {
    while (true) {
        string komenda;
        cout << "Wpisz 'stop', aby zakończyć: ";
        cin >> komenda;

        if (komenda == "stop") {
            cout << "Zatrzymywanie serwera..." << endl;
            break;  // Przerwanie pętli
        }

        cout << "Otrzymano komendę: " << komenda << endl;
    }

    return 0;
}

Przykładowy wynik:

Wpisz 'stop', aby zakończyć: test
Otrzymano komendę: test
Wpisz 'stop', aby zakończyć: help
Otrzymano komendę: help
Wpisz 'stop', aby zakończyć: stop
Zatrzymywanie serwera...

2. Gry komputerowe

W grach pętla nieskończona odpowiada za cykl renderowania obrazu, obsługę klawiatury, myszki itp.

Przykład: Prosta pętla symulująca grę

#include <iostream>
#include <cstdlib> // dla funkcji rand()
#include <ctime>   // dla funkcji time()
using namespace std;

int main() {
    srand(time(0)); // Inicjalizacja generatora liczb losowych

    while (true) {
        int los = rand() % 10;  // Losuje liczbę od 0 do 9
        cout << "Wylosowano: " << los << endl;

        if (los == 7) {
            cout << "Trafiłeś szczęśliwą siódemkę! Koniec gry." << endl;
            break;
        }
    }

    return 0;
}

3. Programy monitorujące i automatyczne systemy

Pętle nieskończone są wykorzystywane w systemach czuwających nad działaniem urządzeń lub w automatycznych systemach.

Przykład: Symulacja monitorowania temperatury

#include <iostream>
#include <cstdlib> // dla funkcji rand()
#include <thread>  // dla funkcji sleep_for
#include <chrono>  // dla określania czasu

using namespace std;

int main() {
    while (true) {
        int temperatura = rand() % 100;  // Losowa temperatura 0-99
        cout << "Aktualna temperatura: " << temperatura << "°C" << endl;

        if (temperatura > 70) {
            cout << "ALARM! Wysoka temperatura!" << endl;
            break;
        }

        this_thread::sleep_for(chrono::seconds(1));  // Opóźnienie 1 sekundy
    }

    return 0;
}

4. Menu w programach konsolowych

Pętle nieskończone umożliwiają tworzenie menu, które działa do momentu, gdy użytkownik wybierze opcję zakończenia.

Przykład: Menu wyboru

#include <iostream>
using namespace std;

int main() {
    int opcja;

    while (true) {
        cout << "\nMENU:\n";
        cout << "1. Pokaż powitanie\n";
        cout << "2. Pokaż datę\n";
        cout << "3. Zakończ program\n";
        cout << "Wybierz opcję: ";
        cin >> opcja;

        if (opcja == 1) {
            cout << "Witaj w programie!" << endl;
        } 
        else if (opcja == 2) {
            cout << "Dziś jest piękny dzień!" << endl;
        } 
        else if (opcja == 3) {
            cout << "Do widzenia!" << endl;
            break;
        } 
        else {
            cout << "Niepoprawna opcja, spróbuj ponownie." << endl;
        }
    }

    return 0;
}

3. Jak uniknąć problemów z pętlami nieskończonymi?

🔹 Dodaj warunek przerwania (break) – kluczowy element kontroli.
🔹 Upewnij się, że pętla faktycznie reaguje na dane wejściowe (np. klawiatura, komunikaty z serwera).
🔹 Zadbaj o przerwy w wykonywaniu (sleep) – zapobiega to nadmiernemu obciążeniu CPU w niektórych przypadkach.


4. Podsumowanie

✅ Pętla nieskończona jest niezwykle przydatna w aplikacjach, które muszą działać bez końca (np. serwery, gry, systemy monitorujące).
✅ Choć potężna, wymaga odpowiedniego mechanizmu zakończenia, aby uniknąć zawieszenia programu.
✅ Pętle while(true) i for(;;) są najczęściej stosowanymi formami pętli nieskończonych w C++.