Anasayfa / C# / CONSOLE APPS / C# While Döngüsü ve Do-While Kullanımı

C# While Döngüsü ve Do-While Kullanımı

C# programlama eğitim serimizin bir önceki bölümünde, belirli bir sayıda tekrar eden işlemleri otomatikleştirmek için “For Döngüsü”nü öğrenmiştik. Ancak programlama dünyasında her zaman bir işlemin kaç kere tekrar edeceğini önceden bilemeyiz.

Örneğin; bir kullanıcının doğru şifreyi kaçıncı denemesinde gireceğini, bir dosyanın internetten indirilme işleminin tam olarak kaç saniye süreceğini veya bir oyunun kullanıcının “Çıkış” tuşuna basana kadar ne kadar süre açık kalacağını önceden bilmek imkansızdır.

İşte tam bu noktada, “belirli bir koşul doğru olduğu sürece” çalışmaya devam eden esnek ve güçlü bir yapıya ihtiyaç duyarız: While Döngüsü.

Kapsamlı rehberimizde, C# dilinde While ve Do-While döngülerinin mantığını günlük hayattan örneklerle kavrayacak, modern C# (Top-level statements) standartlarında yazılmış bol örnekle kodlama becerilerinizi pekiştireceksiniz.


1. While Döngüsü (While Loop) Nedir?

İngilizce bir kelime olan “While”, Türkçe’de “…iken” veya “…olduğu sürece” anlamına gelir. Programlamadaki çalışma mantığı da kelime anlamıyla birebir aynıdır: “Parantez içindeki koşul doğru (true) olduğu sürece, süslü parantezler içindeki kod bloğunu tekrar tekrar çalıştır.”

Gerçek hayattan bir örnek verelim:

  • Koşul: Bardakta su var mı?
  • Eylem: Su içmeye devam et. Bardaktaki su bitene kadar (koşul false olana kadar) su içme eylemi devam eder. Suyu kaç yudumda bitireceğiniz (adım sayısı) belli değildir; önemli olan tek şey koşulun sağlanıp sağlanmamasıdır.

While Döngüsünün Anatomisi (Sözdizimi)

while (koşul)
{
    // Koşul doğru (true) olduğu sürece çalıştırılacak kodlar
}

Çalışma Mantığı:

  1. Program while kelimesini gördüğünde hemen yanındaki parantezin içindeki koşula bakar.
  2. Eğer koşul doğruysa (true), süslü parantezlerin { } içine girer ve kodları yukarıdan aşağıya çalıştırır.
  3. Bloğun sonuna geldiğinde tekrar başa döner ve koşulu bir kez daha kontrol eder.
  4. Koşul yanlış (false) olana kadar bu döngü (loop) dönmeye devam eder. Koşul yanlış olduğunda ise program döngüyü atlar ve yoluna devam eder.

2. İlk While Döngümüz: Temel Bir Örnek

While döngüsünün mekaniğini anlamak için, For döngüsü ile yaptığımız klasik “1’den 5’e kadar sayma” işlemini bu kez While ile yapalım. Daha önce öğrendiğimiz üst düzey ifadeler (Top-level statements) sayesinde Program.cs dosyanıza doğrudan şu kodları yazabilirsiniz:

// Sayacımızı döngünün dışında tanımlıyoruz
int sayac = 1;

// Koşul: sayac değeri 5'e küçük veya eşit OLDUĞU SÜRECE dön!
while (sayac <= 5)
{
    Console.WriteLine($"Mevcut sayı: {sayac}");

    // Sonsuz döngüye girmemek için sayacı her turda 1 artırıyoruz
    sayac++;
}

Console.WriteLine("Döngü bitti, yola devam ediyoruz!");

Kodu İnceleyelim: Burada sayac değişkenini döngüden önce biz manuel olarak oluşturduk. Döngü her çalıştığında ekrana sayıyı yazdırır ve ardından sayac++ komutu ile sayacın değerini 1 artırır. Eğer sayac++ satırını yazmayı unutursanız, sayacın değeri her zaman 1 kalacağı için 1 <= 5 koşulu sonsuza kadar doğru olacak ve programınız kilitlenecektir (Buna “Sonsuz Döngü – Infinite Loop” denir).


3. Gerçek Hayat Senaryosu: Şifre Doğrulama Sistemi

Gelelim While döngüsünün gerçek gücüne! Sayı saymak için For döngüsü daha kullanışlıdır ancak kullanıcı etkileşimi gerektiren, kaç kez tekrar edeceği belirsiz durumlarda While döngüsü rakipsizdir.

Kullanıcıdan bir gizli şifre girmesini isteyen ve doğru şifre girilene kadar programı ilerletmeyen bir güvenlik sistemi yazalım:

string gizliSifre = "Csharp2026";
string girilenSifre = "";

Console.WriteLine("Sisteme hoş geldiniz.");

// Girilen şifre, gizli şifreye EŞİT OLMADIĞI SÜRECE döngü çalışsın
while (girilenSifre != gizliSifre)
{
    Console.WriteLine("Lütfen giriş yapmak için şifrenizi giriniz:");
    girilenSifre = Console.ReadLine(); // Kullanıcıdan yeni şifre istiyoruz

    if (girilenSifre != gizliSifre)
    {
        Console.WriteLine("Hatalı şifre girdiniz! Lütfen tekrar deneyin.\n");
    }
}

// Döngüden sadece doğru şifre girildiğinde çıkılabilir
Console.WriteLine("Tebrikler! Şifre doğru, sisteme başarıyla giriş yaptınız.");

Bu örnekte kullanıcının şifreyi 1. denemede mi, yoksa 50. denemede mi doğru gireceğini bilemeyiz. Ancak While döngüsü sayesinde, şifre doğru girilene kadar sistemin tekrar tekrar sormasını (programın bir nevi o noktada nöbet tutmasını) sağlamış olduk.


4. Do-While Döngüsü Nedir ve Farkı Nelerdir?

While döngüsünün çok yakın bir akrabası vardır: Do-While Döngüsü.

Standart while döngüsü önce koşula bakar, eğer koşul sağlarsa kodları çalıştırır. Yani koşul baştan yanlışsa, döngünün içindeki kodlar hiç çalışmayabilir.

Do-While döngüsünde ise (İngilizce do: yap), program önce kodları hiçbir koşula bakmaksızın en az 1 kere çalıştırır, ardından koşulu kontrol eder. Koşul doğruysa başa dönüp tekrar çalıştırır. Yani bir eylemin kesinlikle en az bir kez çalışmasını istiyorsanız do-while kullanmalısınız.

Do-While Sözdizimi:

do
{
    // En az 1 kere kesinlikle çalışacak kodlar
}
while (koşul); // Dikkat: do-while döngüsünün sonunda noktalı virgül (;) bulunur!

Do-While İçin Pratik Örnek: Oyun Menüsü

Oyunlarda veya bankamatiklerde (ATM) ekrana her zaman önce bir menü gelir. Kullanıcı bir seçim yapar ve menü tekrar gelir. Çıkış seçilmedikçe menü gösterilmeye devam eder. Bu tam bir do-while senaryosudur:

string secim;

do
{
    Console.WriteLine("--- ANA MENÜ ---");
    Console.WriteLine("1. Yeni Oyun Başlat");
    Console.WriteLine("2. Ayarlar");
    Console.WriteLine("3. Çıkış Yap");
    Console.WriteLine("Lütfen bir seçenek girin (1/2/3):");

    secim = Console.ReadLine();

    if (secim == "1")
    {
        Console.WriteLine("Oyun yükleniyor... Lütfen bekleyin.\n");
    }
    else if (secim == "2")
    {
        Console.WriteLine("Ayarlar menüsüne girildi.\n");
    }
    else if (secim != "3")
    {
        Console.WriteLine("Geçersiz bir tuşa bastınız!\n");
    }

}
while (secim != "3"); // Seçim "3" OLMADIĞI SÜRECE menüyü tekrar göster

Console.WriteLine("Oyundan çıkılıyor. Görüşmek üzere!");

Kodu çalıştırdığınızda göreceksiniz ki, menü kullanıcının karşısına en az 1 kez kesinlikle çıkmaktadır. Kullanıcı 3’e bastığında ise koşul kontrol edilecek, secim != "3" ifadesi false sonuç vereceği için döngü sonlanacaktır.


5. Sonsuz Döngüler ve Break / Continue Komutları

Bazen uygulamalarımızda döngünün sonsuza kadar dönmesini kasıtlı olarak isteyebiliriz. Örneğin bir web sunucusu (API) veya bir oyun motoru, sistemi kapatana kadar arka planda sonsuz bir döngüde (Game Loop) çalışır.

Bunu yapmak için koşul kısmına manuel olarak true yazarız: while(true). Peki bu döngüden nasıl çıkacağız? Önceki derslerimizde öğrendiğimiz break komutu ile!

Aşağıdaki örnekte kullanıcı klavyeden ‘Q’ harfine basana kadar sürekli ondan sayı isteyen ve bu sayıları toplayan bir program yazalım:

int toplam = 0;

Console.WriteLine("Sayı toplama programına hoş geldiniz!");
Console.WriteLine("Çıkmak için 'Q' tuşuna basınız.");

while (true) // Sonsuz döngü başlattık
{
    Console.Write("Bir sayı girin: ");
    string girdi = Console.ReadLine();

    // Kullanıcı Q'ya basarsa döngüyü KIR ve ÇIK!
    if (girdi.ToUpper() == "Q")
    {
        break;
    }

    // Girilen değeri tam sayıya çeviriyoruz (Dönüşüm işlemleri)
    // Eğer hatalı bir harf girilirse programın çökmemesi için if-else eklenebilir ancak burada basit tutuyoruz
    int sayi = Convert.ToInt32(girdi);
    toplam += sayi; // Toplamın üzerine ekle

    Console.WriteLine($"Şu anki toplam: {toplam}");
}

Console.WriteLine($"Program sonlandı. Girdiğiniz sayıların son toplamı: {toplam}");

(Eğer döngüde belirli bir adımı es geçip, tamamen çıkmadan hemen sonraki tura atlamak isteseydik break yerine continue komutunu kullanabilirdik.)


Özet: For mu, Yoksa While mı?

Yazılıma yeni başlayanların en çok sorduğu sorulardan biri şudur: “Hangi döngüyü nerede kullanmalıyım?” Bunun çok basit bir altın kuralı vardır:

  • Bir işlemin tam olarak kaç kez tekrar edeceğini önceden biliyorsanız (Örn: 1’den 100’e kadar saymak, 50 kişilik bir sınıf listesini ekrana yazdırmak), for döngüsünü kullanın.
  • Bir işlemin kaç kez tekrar edeceği belirsizse, kullanıcının bir hareketine, bir dosyanın bitimine veya bir bağlantının kopmasına bağlıysa (Örn: Doğru şifre girilene kadar bekle, bağlantı var olduğu sürece veri indir), while veya do-while döngüsünü kullanın.

Sonuç

Tebrikler! C# dilinde programlarımıza akıl ve esneklik katan While ve Do-While Döngülerini detaylıca öğrenmiş oldunuz. Sadece belirli sayıda saymayı değil, kullanıcının eylemlerini izleyerek gerektiğinde sonsuza kadar bekleyen, gerektiğinde anında tepki veren dinamik yapılar inşa etmeyi kavradınız.

Öğrendiğimiz değişkenler, if-else yapıları ve while döngüsünü harmanlayarak kendinize ait ufak bir “Sayı Tahmin Oyunu” (bilgisayarın tuttuğu sayıyı bulana kadar while ile soran bir oyun) programlamayı deneyebilirsiniz! Bir sonraki konumuzda verileri tek bir kutuda değil, bir liste halinde tutmamızı sağlayan “Diziler (Arrays)” dünyasına giriş yapacağız. Bol kodlamalı günler!

Etiketlendi:

Cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir