Yükleniyor...

C# Döngüler (for, foreach, while, do-while)

C#’ta for, foreach, while ve do-while döngülerinin nasıl kullanıldığını öğrenin. Tekrar eden işlemleri yönetmek için pratik örnekler keşfedin.

C# dilinde döngüler, belirli bir koşul doğru olduğu sürece aynı kod bloğunu tekrar tekrar çalıştırmamızı sağlar. Programcıya zamandan tasarruf sağlar ve tekrar eden işlemleri kolayca yapabilmemizi mümkün kılar. C#’ta en çok kullanılan döngüler: for, foreach, while ve do-while döngüleridir.


for Döngüsü

for döngüsü, genellikle tekrar sayısının bilindiği durumlarda kullanılır. Sayaç değişkeni ile kontrol edilir.

İleri Sayım: i sayacı her seferinde 1 artacak. 5 olmadan döngü bitecek.


for (int i = 0; i < 5; i++)
{
    Console.WriteLine("Adım: " + i);
}
// Çıktı:
Adım: 0
Adım: 1
Adım: 2
Adım: 3
Adım: 4

Geriye Doğru Sayım: i sayacı her seferinde 1 eksilecek. 0 olmadan döngü bitecek.


for (int i = 5; i > 0; i--)
{
    Console.WriteLine("Geri Sayım: " + i);
}
// Çıktı:
Geri Sayım: 5
Geri Sayım: 4
Geri Sayım: 3
Geri Sayım: 2
Geri Sayım: 1

5’er 5’er Artış i sayacı her seferinde 5 artacak. 25 olduğunda döngü bitecek.


for (int i = 0; i <= 25; i += 5)
{
    Console.WriteLine("Sayı: " + i);
}
// Çıktı:
Sayı: 0
Sayı: 5
Sayı: 10
Sayı: 15
Sayı: 20
Sayı: 25

İç İçe for Döngüsü: İç içe i ve j sayaçları ile her biri 3'e kadar sayarken ekrana çarpımlarını yazan programın çıktısı şöyle olacaktır.


for (int i = 1; i <= 3; i++)
{
    for (int j = 1; j <= 3; j++)
    {
        Console.Write($"{i * j}\t");
    }
    Console.WriteLine();
}
// Çıktı:
1    2    3
2    4    6
3    6    9

break ve continue

Döngülerde bazen akışı kontrol etmek için break ve continue anahtar kelimeleri kullanılır.

break: Döngüyü tamamen sonlandırır.


for (int i = 1; i <= 5; i++)
{
    if (i == 3)
        break; // i değeri 3 olduğunda döngü sona erer

    Console.WriteLine("i: " + i);
}
// Çıktı:
i: 1
i: 2

continue: Sadece o adımdaki işlemi atlar, döngünün geri kalanı devam eder.


for (int i = 1; i <= 5; i++)
{
    if (i == 3)
        continue; // i değeri 3 olduğunda bu adımı atlar

    Console.WriteLine("i: " + i);
}
// Çıktı:
i: 1
i: 2
i: 4
i: 5

foreach Döngüsü

foreach döngüsü, koleksiyonlar (dizi, liste vb.) üzerinde gezinmek için kullanılır. Eleman sayısını bilmeye gerek yoktur.


string[] meyveler = { "Elma", "Armut", "Muz" };

foreach (string meyve in meyveler)
{
    Console.WriteLine(meyve);
}

Bu örnekte meyveler dizisindeki her eleman sırayla ekrana yazdırılır.


while Döngüsü

while döngüsü, koşul doğru olduğu sürece tekrar eder. Kaç kez çalışacağı önceden bilinmeyebilir.

Basit Sayaç: sayi değişkeni 1’den başlayıp 3’e kadar ekrana yazdırılır.


int sayi = 1;

while (sayi <= 3)
{
    Console.WriteLine("Sayı: " + sayi);
    sayi++;
}
// Çıktı:
Sayı: 1
Sayı: 2
Sayı: 3

String Karakterlerini Yazdırma: Bu örnekte while döngüsü ile bir metnin karakterleri tek tek yazdırılır. Eğer boşluk karakteri gelirse continue ile atlanır. Nokta (.) karakteri geldiğinde ise break ile döngü sona erer.


string metin = "Bugün hava güzel. Dışarı çıkalım.";
int index = 0;

while (index < metin.Length)
{
    char c = metin[index];

    if (c == ' ')
    {
        index++;
        continue; // boşlukları atla
    }

    if (c == '.')
        break; // nokta geldiğinde döngüyü bitir

    Console.WriteLine(c);
    index++;
}
// Çıktı:
B
u
g
ü
n
h
a
v
a
g
ü
z
e
l

Sonsuz while(true) Örneği: Sonsuz döngülerde break ile çıkış yapılabilir. Bu örnekte kullanıcı doğru şifreyi girene kadar tekrar sorulur.


while (true)
{
    Console.Write("Şifreyi giriniz: ");
    string sifre = Console.ReadLine();

    if (sifre == "1234")
    {
        Console.WriteLine("Giriş başarılı!");
        break; // doğru şifre girildi, döngüden çık
    }

    Console.WriteLine("Hatalı şifre, tekrar deneyin.");
}
// Örnek Çalışma:
Şifreyi giriniz: 1111
Hatalı şifre, tekrar deneyin.
Şifreyi giriniz: 2222
Hatalı şifre, tekrar deneyin.
Şifreyi giriniz: 1234
Giriş başarılı!

do-while Döngüsü

do-while döngüsü, en az bir kez çalışır ve daha sonra koşulu kontrol eder. Yani koşul yanlış olsa bile döngü en az bir kere çalışır.

Basit Örnek: Koşul baştan sağlanmasa bile döngü bir kez çalışacaktır.


int x = 5;

do
{
    Console.WriteLine("x değeri: " + x);
    x++;
} while (x < 5);
// Çıktı:
x değeri: 5

Tam Bölenleri Bulma: Kullanıcıdan alınan bir sayının tam bölenleri do-while döngüsü ile bulunur.


Console.Write("Bir sayı giriniz: ");
int sayi = int.Parse(Console.ReadLine());

if (sayi <= 0)
{
    Console.WriteLine("0'dan büyük bir sayı giriniz.");
}
else
{
    int bolen = sayi;

    Console.WriteLine($"{sayi} sayısının tam bölenleri:");

    do
    {
        if (sayi % bolen == 0)
        {
            Console.WriteLine(bolen);
        }
        bolen--;
    } while (bolen >= 1);
}
// Örnek Çalışma:
Bir sayı giriniz: 12
12 sayısının tam bölenleri:
12
6
4
3
2

Özet


Uygulama: Ok Tuşlarıyla Menü ve Ürün Yönetimi

Bu örnekte sonsuz döngü ile çalışan, ok tuşları (↑/↓) ve Enter ile seçim yapılan basit bir menü yazıyoruz. 5 adet ürün için isim ve fiyat bilgilerinin tutulduğu diziler kullanılır. Menüler: Ürünleri Yazdır, Ürün Güncelle, Ürün Sil, Kapat.


using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        string[] urunAdlari = { "Kalem", "Defter", "Silgi", "Çanta", "Cetvel" };
        decimal[] urunFiyatlari = { 12.5m, 45m, 7.9m, 350m, 22.75m };

        string[] menu = { "Ürünleri Yazdır", "Ürün Güncelle", "Ürün Sil", "Kapat" };
        int secili = 0;

        while (true) // Sonsuz döngü
        {
            Console.Clear();
            Console.WriteLine("=== Ürün Yönetimi ===\n");

            // Menü çizimi
            for (int i = 0; i < menu.Length; i++)
            {
                if (i == secili)
                {
                    Console.ForegroundColor = ConsoleColor.Black;
                    Console.BackgroundColor = ConsoleColor.Cyan;
                    Console.WriteLine($"> {menu[i]}");
                    Console.ResetColor();
                }
                else
                {
                    Console.WriteLine($"  {menu[i]}");
                }
            }

            Console.WriteLine("\nOk tuşları ile gez, Enter ile seç, Esc ile çık.");

            var key = Console.ReadKey(true);

            if (key.Key == ConsoleKey.UpArrow)
                secili = (secili - 1 + menu.Length) % menu.Length;
            else if (key.Key == ConsoleKey.DownArrow)
                secili = (secili + 1) % menu.Length;
            else if (key.Key == ConsoleKey.Escape)
                break;
            else if (key.Key == ConsoleKey.Enter)
            {
                if (secili == 0) // Ürünleri Yazdır
                {
                    Console.Clear();
                    Console.WriteLine("=== Ürün Listesi ===\n");
                    for (int i = 0; i < urunAdlari.Length; i++)
                    {
                        string ad = string.IsNullOrWhiteSpace(urunAdlari[i]) ? "(silinmiş)" : urunAdlari[i];
                        Console.WriteLine($"{i + 1}. {ad,-15} | {urunFiyatlari[i],8:0.00} TL");
                    }
                    Console.WriteLine("\nDevam için bir tuşa basın...");
                    Console.ReadKey(true);
                }
                else if (secili == 1) // Ürün Güncelle
                {
                    int index = 0;
                    while (true)
                    {
                        Console.Clear();
                        Console.WriteLine("=== Güncellenecek Ürün Seçin ===\n");
                        for (int i = 0; i < urunAdlari.Length; i++)
                        {
                            string ad = string.IsNullOrWhiteSpace(urunAdlari[i]) ? "(silinmiş)" : urunAdlari[i];
                            if (i == index)
                            {
                                Console.ForegroundColor = ConsoleColor.Black;
                                Console.BackgroundColor = ConsoleColor.Yellow;
                                Console.WriteLine($"> {i + 1}. {ad,-15} | {urunFiyatlari[i],8:0.00} TL");
                                Console.ResetColor();
                            }
                            else
                            {
                                Console.WriteLine($"  {i + 1}. {ad,-15} | {urunFiyatlari[i],8:0.00} TL");
                            }
                        }
                        Console.WriteLine("\nOk tuşları ile gez, Enter ile seç, Esc ile geri dön.");
                        var k = Console.ReadKey(true);
                        if (k.Key == ConsoleKey.UpArrow) index = (index - 1 + urunAdlari.Length) % urunAdlari.Length;
                        else if (k.Key == ConsoleKey.DownArrow) index = (index + 1) % urunAdlari.Length;
                        else if (k.Key == ConsoleKey.Escape) break;
                        else if (k.Key == ConsoleKey.Enter)
                        {
                            Console.Clear();
                            Console.WriteLine("=== Ürün Güncelle ===\n");
                            Console.WriteLine($"Seçili: {urunAdlari[index]} | Eski fiyat: {urunFiyatlari[index]:0.00} TL\n");

                            Console.Write("Yeni isim (boş bırakılırsa değişmez): ");
                            string yeniAd = Console.ReadLine();
                            if (!string.IsNullOrWhiteSpace(yeniAd))
                                urunAdlari[index] = yeniAd.Trim();

                            Console.Write("Yeni fiyat (boş bırakılırsa değişmez): ");
                            string fiyatStr = Console.ReadLine();
                            if (decimal.TryParse(fiyatStr, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal yeniFiyat))
                                urunFiyatlari[index] = Math.Max(0, yeniFiyat);

                            Console.WriteLine("\nGüncelleme tamamlandı. Devam için tuşa bas...");
                            Console.ReadKey(true);
                            break;
                        }
                    }
                }
                else if (secili == 2) // Ürün Sil
                {
                    int index = 0;
                    while (true)
                    {
                        Console.Clear();
                        Console.WriteLine("=== Silinecek Ürün Seçin ===\n");
                        for (int i = 0; i < urunAdlari.Length; i++)
                        {
                            string ad = string.IsNullOrWhiteSpace(urunAdlari[i]) ? "(silinmiş)" : urunAdlari[i];
                            if (i == index)
                            {
                                Console.ForegroundColor = ConsoleColor.Black;
                                Console.BackgroundColor = ConsoleColor.Red;
                                Console.WriteLine($"> {i + 1}. {ad,-15} | {urunFiyatlari[i],8:0.00} TL");
                                Console.ResetColor();
                            }
                            else
                            {
                                Console.WriteLine($"  {i + 1}. {ad,-15} | {urunFiyatlari[i],8:0.00} TL");
                            }
                        }
                        Console.WriteLine("\nOk tuşları ile gez, Enter ile seç, Esc ile geri dön.");
                        var k = Console.ReadKey(true);
                        if (k.Key == ConsoleKey.UpArrow) index = (index - 1 + urunAdlari.Length) % urunAdlari.Length;
                        else if (k.Key == ConsoleKey.DownArrow) index = (index + 1) % urunAdlari.Length;
                        else if (k.Key == ConsoleKey.Escape) break;
                        else if (k.Key == ConsoleKey.Enter)
                        {
                            urunAdlari[index] = string.Empty;
                            urunFiyatlari[index] = 0m;
                            Console.WriteLine("\nÜrün silindi. Devam için tuşa bas...");
                            Console.ReadKey(true);
                            break;
                        }
                    }
                }
                else if (secili == 3) // Kapat
                {
                    return;
                }
            }
        }
    }
}

Notlar: