C# While ve Do While Döngüleri ve Örnekleri
C# programlama dilinde döngüler, belirli işlemlerin tekrar tekrar gerçekleştirilmesini sağlayan kontrol yapılarıdır. Önceki dersimizde for döngüsünü kullanarak sayaç işlemleri, sayıların toplamını hesaplama ve çarpım tablosu oluşturma gibi uygulamalar geliştirmiştik.
Bu dersimizde ise while ve do-while döngülerini inceleyeceğiz. Bu döngüler özellikle bir işlemin kaç kez tekrarlanacağının önceden bilinmediği, tekrarın belirli bir koşula bağlı olduğu durumlarda kullanılır. Örneğin kullanıcı doğru şifreyi girene kadar işlem yapmak, menüden çıkış seçilene kadar seçenekleri görüntülemek veya belirli bir koşul gerçekleşene kadar kullanıcıdan veri almak için kullanılabilir.
1. C# WHILE DÖNGÜSÜ NEDİR?
While döngüsü, belirtilen koşul doğru olduğu sürece içerisindeki komutları tekrar tekrar çalıştıran bir döngü yapısıdır.
While döngüsünde koşul, döngü içerisindeki komutlar çalıştırılmadan önce kontrol edilir. Koşul başlangıçta yanlışsa döngü hiç çalışmayabilir.
While döngüsünün temel özellikleri şunlardır:
- Koşul her tekrardan önce kontrol edilir.
- Koşul doğru olduğu sürece döngü devam eder.
- Koşul yanlış olduğunda döngü sona erer.
- Koşul başlangıçta yanlışsa döngü hiç çalışmaz.
- Tekrar sayısının önceden bilinmediği durumlarda kullanışlıdır.
2. WHILE DÖNGÜSÜNÜN SÖZ DİZİMİ
C# programlama dilinde while döngüsünün genel kullanımı aşağıdaki gibidir.
while (kosul)
{
// Koşul doğru olduğu sürece
// çalıştırılacak komutlar
}
While döngüsünün çalışma sırası şu şekildedir:
- Öncelikle koşul kontrol edilir.
- Koşul doğruysa döngü içerisindeki komutlar çalıştırılır.
- Komutlar tamamlandıktan sonra koşul yeniden kontrol edilir.
- Koşul doğru olduğu sürece işlemler tekrarlanır.
- Koşul yanlış olduğunda döngü sona erer.
WHILE DÖNGÜSÜ İLE İLK ÖRNEK
int sayac = 1;
while (sayac <= 5)
{
Console.WriteLine("Merhaba C#");
sayac++;
}
Bu örnekte sayaç değişkeni 1 değerinden başlar. Sayaç 5'e eşit veya küçük olduğu sürece "Merhaba C#" mesajı ekrana yazdırılır.
Her tekrarda sayaç bir artırılır. Sayaç 6 olduğunda koşul yanlış olur ve döngü sona erer.
3. WHILE DÖNGÜSÜ İLE SAYILARI YAZDIRMA
While döngüsünü kullanarak 1'den 10'a kadar olan sayıları ekrana yazdıralım.
int sayi = 1;
while (sayi <= 10)
{
Console.WriteLine(sayi);
sayi++;
}
Ekran çıktısı:
1
2
3
4
5
6
7
8
9
10
Bu örnekte sayaç değişkeni döngüden önce tanımlanmıştır. For döngüsünden farklı olarak artırma işlemi de döngünün içerisinde gerçekleştirilmiştir.
4. WHILE DÖNGÜSÜ İLE AZALAN SAYILAR
While döngüsünde sayaç değişkeni artırılabileceği gibi azaltılabilir de. Örneğin 10'dan 1'e kadar olan sayıları tersten yazdıralım.
int sayi = 10;
while (sayi >= 1)
{
Console.WriteLine(sayi);
sayi--;
}
Bu örnekte sayaç 10 değerinden başlar ve her tekrarda 1 azaltılır. Sayaç 0 olduğunda koşul yanlış olur ve döngü sona erer.
5. C# DO WHILE DÖNGÜSÜ NEDİR?
Do-while döngüsü, while döngüsüne benzer şekilde belirli bir koşula bağlı olarak tekrar eden işlemleri gerçekleştirir. Ancak iki döngü arasında önemli bir fark bulunmaktadır.
Do-while döngüsünde koşul, komutlar çalıştırıldıktan sonra kontrol edilir. Bu nedenle koşul başlangıçta yanlış olsa bile döngü içerisindeki komutlar en az bir kez çalıştırılır.
Do-while döngüsü özellikle kullanıcıdan en az bir kez veri alınması veya bir menünün en az bir kez görüntülenmesi gereken uygulamalarda tercih edilebilir.
6. DO WHILE DÖNGÜSÜNÜN SÖZ DİZİMİ
Do-while döngüsünün genel kullanımı aşağıdaki gibidir.
do
{
// Çalıştırılacak komutlar
}
while (kosul);
Do-while döngüsünün çalışma sırası şu şekildedir:
- Öncelikle do bloğundaki komutlar çalıştırılır.
- Komutlar tamamlandıktan sonra while koşulu kontrol edilir.
- Koşul doğruysa döngü yeniden çalıştırılır.
- Koşul yanlışsa döngü sona erer.
DO WHILE DÖNGÜSÜ İLE İLK ÖRNEK
int sayac = 1;
do
{
Console.WriteLine(sayac);
sayac++;
}
while (sayac <= 5);
Bu örnekte 1'den 5'e kadar olan sayılar ekrana yazdırılır.
Önemli: Do-while yapısında while koşulundan sonra noktalı virgül (;) bulunmalıdır.
7. WHILE VE DO WHILE ARASINDAKİ FARKLAR
While ve do-while döngülerinin temel farkı, koşulun kontrol edildiği yerdir.
| Özellik |
While |
Do While |
| Koşul kontrolü |
Döngüden önce |
Döngüden sonra |
| En az çalışma sayısı |
0 |
1 |
| Koşul başlangıçta yanlışsa |
Çalışmaz |
Bir kez çalışır |
| Genel kullanım |
Ön koşullu tekrarlar |
En az bir kez yapılacak işlemler |
| Noktalı virgül |
Blok sonunda gerekmez |
while koşulundan sonra gerekir |
WHILE VE DO WHILE KARŞILAŞTIRMA ÖRNEĞİ
Öncelikle while döngüsünü inceleyelim.
int sayi = 10;
while (sayi < 5)
{
Console.WriteLine("While çalıştı.");
}
Bu örnekte koşul başlangıçta yanlış olduğundan ekrana hiçbir şey yazdırılmaz.
Aynı koşulu do-while ile kullanalım.
int sayi = 10;
do
{
Console.WriteLine("Do While çalıştı.");
}
while (sayi < 5);
Bu örnekte koşul yanlış olmasına rağmen "Do While çalıştı." mesajı bir kez görüntülenir.
8. WHILE DÖNGÜSÜ İLE TOPLAMA İŞLEMİ
While döngüsü kullanarak belirli bir aralıktaki sayıların toplamını hesaplayabiliriz.
int sayac = 1;
int toplam = 0;
while (sayac <= 10)
{
toplam += sayac;
sayac++;
}
Console.WriteLine("Toplam: " + toplam);
Bu uygulamada 1'den 10'a kadar olan sayıların toplamı hesaplanır.
Ekran çıktısı: Toplam: 55
9. UYGULAMA 1: KULLANICIDAN POZİTİF SAYI İSTEME
Kullanıcı pozitif bir tam sayı girene kadar tekrar tekrar sayı isteyen bir Console uygulaması hazırlayalım.
int sayi;
do
{
Console.Write("Pozitif bir tam sayı giriniz: ");
sayi = Convert.ToInt32(Console.ReadLine());
if (sayi <= 0)
{
Console.WriteLine("Hatalı giriş! Tekrar deneyiniz.");
}
}
while (sayi <= 0);
Console.WriteLine("Girilen sayı: " + sayi);
Açıklama: Program kullanıcıdan en az bir kez sayı ister. Girilen sayı sıfır veya negatifse döngü tekrar çalışır. Pozitif sayı girildiğinde döngü sona erer.
Bu örnekte kullanıcının geçerli bir tam sayı yazdığı varsayılmıştır. Sayısal olmayan girişlerin kontrolü için int.TryParse() kullanılabilir.
10. UYGULAMA 2: DOĞRU ŞİFRE GİRİLENE KADAR TEKRAR İSTEME
Kullanıcı doğru şifreyi girene kadar şifre isteyen bir Console uygulaması geliştirelim.
string dogruSifre = "12345";
string girilenSifre = "";
while (girilenSifre != dogruSifre)
{
Console.Write("Şifrenizi giriniz: ");
girilenSifre = Console.ReadLine();
if (girilenSifre != dogruSifre)
{
Console.WriteLine("Hatalı şifre! Tekrar deneyiniz.");
}
}
Console.WriteLine("Giriş başarılı.");
Açıklama: Programda başlangıçta girilen şifre boş olarak tanımlanır. Kullanıcı doğru şifreyi girene kadar while döngüsü çalışmaya devam eder.
Doğru şifre girildiğinde koşul yanlış olur ve döngü sona erer.
Önemli: Bu örnek eğitim amaçlıdır. Gerçek giriş sistemlerinde şifreler açık şekilde saklanmamalı ve sınırsız giriş denemelerine izin verilmemelidir.
11. UYGULAMA 3: MENÜLÜ HESAP MAKİNESİ
Do-while döngüsünü kullanarak kullanıcı çıkış seçeneğini seçene kadar çalışmaya devam eden bir hesap makinesi hazırlayalım.
int secim;
do
{
Console.WriteLine("=== HESAP MAKİNESİ ===");
Console.WriteLine("1 - Toplama");
Console.WriteLine("2 - Çıkarma");
Console.WriteLine("3 - Çarpma");
Console.WriteLine("4 - Bölme");
Console.WriteLine("0 - Çıkış");
Console.Write("Seçiminiz: ");
secim = Convert.ToInt32(Console.ReadLine());
if (secim >= 1 && secim <= 4)
{
Console.Write("Birinci sayı: ");
double sayi1 = Convert.ToDouble(Console.ReadLine());
Console.Write("İkinci sayı: ");
double sayi2 = Convert.ToDouble(Console.ReadLine());
switch (secim)
{
case 1:
Console.WriteLine("Sonuç: " + (sayi1 + sayi2));
break;
case 2:
Console.WriteLine("Sonuç: " + (sayi1 - sayi2));
break;
case 3:
Console.WriteLine("Sonuç: " + (sayi1 * sayi2));
break;
case 4:
if (sayi2 != 0)
{
Console.WriteLine("Sonuç: " + (sayi1 / sayi2));
}
else
{
Console.WriteLine("Sıfıra bölme yapılamaz.");
}
break;
}
}
else if (secim != 0)
{
Console.WriteLine("Geçersiz seçim.");
}
Console.WriteLine();
}
while (secim != 0);
Console.WriteLine("Program sona erdi.");
Açıklama: Program menüyü en az bir kez görüntüler. Kullanıcı 1, 2, 3 veya 4 seçeneklerinden birini seçtiğinde ilgili matematiksel işlem gerçekleştirilir.
İşlem tamamlandıktan sonra menü yeniden görüntülenir. Kullanıcı 0 değerini girdiğinde do-while koşulu yanlış olur ve program sona erer.
Bu uygulamada do-while, if-else ve switch-case yapıları birlikte kullanılmıştır.
12. UYGULAMA 4: SAYI TAHMİN OYUNU
Bilgisayarın 1 ile 100 arasında rastgele bir sayı belirlediği ve kullanıcının bu sayıyı tahmin etmeye çalıştığı bir oyun geliştirelim.
Random rastgele = new Random();
int tutulanSayi = rastgele.Next(1, 101);
int tahmin = 0;
int deneme = 0;
Console.WriteLine("1 ile 100 arasında bir sayı tuttum.");
do
{
Console.Write("Tahmininiz: ");
tahmin = Convert.ToInt32(Console.ReadLine());
deneme++;
if (tahmin > tutulanSayi)
{
Console.WriteLine("Daha küçük bir sayı giriniz.");
}
else if (tahmin < tutulanSayi)
{
Console.WriteLine("Daha büyük bir sayı giriniz.");
}
else
{
Console.WriteLine("Tebrikler! Doğru tahmin.");
}
}
while (tahmin != tutulanSayi);
Console.WriteLine("Deneme sayısı: " + deneme);
Açıklama: Random sınıfı kullanılarak 1 ile 100 arasında rastgele bir tam sayı oluşturulur. Kullanıcı her tahminde bulunduğunda program sayının büyük veya küçük olduğunu bildirir.
Doğru tahmin yapıldığında döngü sona erer ve toplam deneme sayısı ekrana yazdırılır.
Önemli: Random.Next(1, 101) ifadesinde alt sınır 1 dahil, üst sınır 101 hariçtir. Bu nedenle 1 ile 100 arasında sayı üretilir.
13. UYGULAMA 5: SIFIR GİRİLENE KADAR SAYILARI TOPLAMA
Kullanıcı sıfır girene kadar sayı almaya devam eden ve girilen sayıların toplamını hesaplayan bir Console uygulaması hazırlayalım.
int sayi;
int toplam = 0;
int adet = 0;
do
{
Console.Write("Bir sayı giriniz (Çıkış: 0): ");
sayi = Convert.ToInt32(Console.ReadLine());
if (sayi != 0)
{
toplam += sayi;
adet++;
}
}
while (sayi != 0);
Console.WriteLine("Girilen sayı adedi: " + adet);
Console.WriteLine("Sayıların toplamı: " + toplam);
if (adet > 0)
{
double ortalama = (double)toplam / adet;
Console.WriteLine("Ortalama: " + ortalama);
}
else
{
Console.WriteLine("Ortalama hesaplanamadı.");
}
Açıklama: Program kullanıcıdan sürekli sayı ister. Girilen sayılar toplam değişkenine eklenir ve sayı adedi artırılır.
Kullanıcı 0 girdiğinde döngü sona erer. Program toplamı, sayı adedini ve ortalamayı ekrana yazdırır.
Ortalama hesaplanırken tam sayı bölmesi yerine ondalıklı sonuç elde etmek için (double) tür dönüşümü kullanılmıştır.
14. WHILE VE DO WHILE DÖNGÜLERİNDE BREAK VE CONTINUE KULLANIMI
While ve do-while döngülerinde de break ve continue komutları kullanılabilir.
BREAK KOMUTU İLE DÖNGÜYÜ SONLANDIRMA
int sayi = 1;
while (sayi <= 10)
{
if (sayi == 6)
{
break;
}
Console.WriteLine(sayi);
sayi++;
}
Bu örnekte sayaç 6 olduğunda break komutu çalışır ve döngü tamamen sona erer. Ekrana 1'den 5'e kadar olan sayılar yazdırılır.
CONTINUE KOMUTU İLE TEKRAR ATLAMA
int sayi = 0;
while (sayi < 10)
{
sayi++;
if (sayi == 5)
{
continue;
}
Console.WriteLine(sayi);
}
Bu örnekte 5 sayısı ekrana yazdırılmaz. Continue komutu çalıştığında döngünün kalan komutları atlanır ve koşul yeniden kontrol edilir.
Dikkat: While döngüsünde continue kullanılırken sayaç değişkeninin güncellenmesi unutulmamalıdır. Aksi durumda döngü sonsuz tekrara girebilir.
15. WHILE VE DO WHILE DÖNGÜLERİNDE SONSUZ DÖNGÜ
Bir döngünün koşulu sürekli doğru kalıyorsa ve döngü içerisinde çıkışı sağlayan bir işlem bulunmuyorsa sonsuz döngü oluşur.
while (true)
{
Console.WriteLine("Döngü çalışıyor.");
}
Bu örnekte koşul sürekli true olduğundan döngü kendiliğinden sona ermez.
Sonsuz döngüler bazı uygulamalarda bilinçli olarak kullanılabilir. Ancak bu durumda döngüden çıkışı sağlayan break veya benzeri bir kontrol mekanizması bulunmalıdır.
BREAK İLE KONTROLLÜ ÇIKIŞ
while (true)
{
Console.Write("Çıkmak için 0 giriniz: ");
string giris = Console.ReadLine();
if (giris == "0")
{
break;
}
Console.WriteLine("Program çalışmaya devam ediyor.");
}
Console.WriteLine("Program sona erdi.");
Bu örnekte döngü sürekli çalışır. Ancak kullanıcı 0 girdiğinde break komutu çalışır ve döngü sona erer.
16. FOR, WHILE VE DO WHILE DÖNGÜLERİNİN KARŞILAŞTIRILMASI
C# programlama dilinde for, while ve do-while döngüleri benzer amaçlarla kullanılabilir. Ancak bazı durumlarda belirli bir döngü türünün tercih edilmesi kodun daha anlaşılır olmasını sağlar.
| Özellik |
For |
While |
Do While |
| Koşul kontrolü |
Önce |
Önce |
Sonra |
| En az çalışma sayısı |
0 |
0 |
1 |
| Sayaç kullanımı |
Yapı içerisinde |
Genellikle ayrı |
Genellikle ayrı |
| Tekrar sayısı belli olduğunda |
Çok uygun |
Uygun |
Uygun |
| Koşula bağlı tekrar |
Uygun |
Çok uygun |
Çok uygun |
| En az bir kez çalıştırma |
Garanti değil |
Garanti değil |
Garanti |
Örneğin 1'den 100'e kadar sayıları yazdırmak için for döngüsü, kullanıcı doğru veri girene kadar tekrar istemek için while döngüsü, bir menüyü en az bir kez göstermek için do-while döngüsü tercih edilebilir.
17. DÖNGÜLERDE DİKKAT EDİLMESİ GEREKENLER
While ve do-while döngüleri kullanılırken aşağıdaki noktalara dikkat edilmelidir:
- Döngünün devam koşulu doğru belirlenmelidir.
- Koşulu değiştirecek işlemler unutulmamalıdır.
- Gereksiz sonsuz döngülerden kaçınılmalıdır.
- Continue kullanıldığında sayaç güncellemesine dikkat edilmelidir.
- Kullanıcıdan alınan veriler mümkün olduğunca doğrulanmalıdır.
- Do-while yapısının sonunda noktalı virgül kullanılmalıdır.
- Çıkış koşulları kullanıcı tarafından anlaşılabilir olmalıdır.
18. SONUÇ
C# programlama dilinde while ve do-while döngüleri, belirli koşullar sağlandığı sürece tekrar eden işlemleri gerçekleştirmek için kullanılan temel kontrol yapılarıdır.
Bu derste while ve do-while döngülerinin çalışma mantığını, aralarındaki farkları, koşul kontrolünü ve break-continue kullanımını öğrendik.
Ayrıca pozitif sayı kontrolü, şifre doğrulama, menülü hesap makinesi, sayı tahmin oyunu ve sayıların toplamını hesaplama gibi Console uygulamaları geliştirerek konuyu pekiştirdik.
Bir sonraki dersimizde C# Break ve Continue Kullanımı konusunu daha ayrıntılı inceleyerek döngülerin çalışma akışının nasıl kontrol edildiğini öğreneceğiz.