İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

C# "error CS1002: ; expected" Hatası Nasıl Çözülür?

csharp-error-cs1002-expected-hatasi-cozumu
Bu yazıda neler var?
  1. CS1002 ne söylüyor ve önce hangi satıra bakmalısın?
  2. Noktalı virgül nerede gerekir, nerede gerekmez?
  3. Hata işaretli satırda değil de öncesindeyse ne yapmalısın?
  4. Satır satır teşhis sırası ve düzeltme kontrol listesi
  5. Fazladan noktalı virgül: derlenir ama mantığı bozar
  6. Sözdizimi hatalarını azaltan çalışma alışkanlıkları

C# "error CS1002: ; expected" hatası, derleyicinin bir ifadenin ya da bildirimin sonunda noktalı virgül aradığını ama bulamadığını söyler. CS1002, derleyicinin noktalı virgül beklediğini bildirir; ancak önceki satırdaki sözdizimi de kontrol edilmelidir. Hata çoğunlukla ifade sonundaki eksik noktalı virgülden gelir. Ama bir önceki satırdaki kapanmamış parantez, tırnak ya da süslü parantez sorunu da aynı mesajı üretebilir.

CS1002 ne söylüyor ve önce hangi satıra bakmalısın?

Mesaj düz bir cümledir: derleyici bir ifadeyi okurken noktalı virgül bekledi, onun yerine başka bir sözcük gördü. Hata penceresinde ya da terminalde satır genel olarak şu biçimdedir:

Program.cs(satır,sütun): error CS1002: ; expected

Soldan sağa dosya adını, hatanın bildirildiği konumu, hata kodunu ve mesajı görürsün. Burada önemli olan şey, konumun derleyicinin takıldığı yeri göstermesidir. Takıldığı yer ile hatanın asıl sebebi çoğu zaman aynı satır olur, ama bazen bir önceki satırdır.

Küçük bir örnek:

int sayi = 5
Console.WriteLine(sayi);

Derleyici ilk satırda 5 değerini okuyup ifadenin bittiğini düşünür ve noktalı virgül arar. Bunun yerine bir sonraki satırdaki Console sözcüğüyle karşılaşır, çünkü ifade henüz kapanmamıştır. Bu yüzden hata, eksik olan satırın sonunda ya da hemen ardındaki satırda bildirilebilir. Düzeltilmiş hâli:

int sayi = 5;
Console.WriteLine(sayi);

Beklenen çıktı 5 olur. Pratik kural: hata işaretli satıra bak, orada bir şey bulamazsan hemen bir üst satıra çık.

Noktalı virgül nerede gerekir, nerede gerekmez?

Noktalı virgül nerede gerekir, nerede gerekmez?

Her yapı için sorulacak soru şudur: bu bir deyim mi, yoksa blok mu? Deyim bir iş yapar ve noktalı virgülle biter. Blok ise süslü parantezlerle kapanan bir çerçevedir.

Noktalı virgül isteyenler:

  • Değişken tanımlama ve atama: int x = 3;
  • Metot çağrısı: Console.WriteLine(x);
  • return, break ve continue deyimleri

Noktalı virgül istemeyenler:

  • Blok sonundaki }
  • if, while, for ve foreach başlıkları, yani gövdeden önceki kısım
  • Sınıf ve metot bildirimlerinin başlığı ile gövdesi

İki yapı bu kuralı bozmuş gibi görünür. do-while döngüsünde while (...) kısmından sonra noktalı virgül gerekir, çünkü döngü bu koşul ifadesiyle biter. for başlığında ise üç bölümü ayıran tam iki noktalı virgül bulunur. Biri eksik ya da fazlaysa derleyici hata verir.

for (int i = 1; i <= 3; i++)
{
    Console.WriteLine("for turu: " + i);
}

int sayac = 0;
do
{
    sayac++;
    Console.WriteLine("do-while sayac: " + sayac);
} while (sayac < 2);

Konsol uygulamasında çalıştırdığında şu çıktıyı alırsın:

for turu: 1
for turu: 2
for turu: 3
do-while sayac: 1
do-while sayac: 2

Örnekte for başlığının sonunda ve do bloğunun kapanış parantezinde noktalı virgül yoktur; yalnızca while (sayac < 2) sonrasında vardır. Bu yapıları ezberlemek yerine her satırda "bu bir deyim mi, blok mu?" diye sormak daha kalıcı bir alışkanlık kazandırır. Temel sözdizimi seviyeni ölçmek istersen C# bilgi testi yalnızca seviye ölçümü yapan ücretsiz bir araçtır.

Hata işaretli satırda değil de öncesindeyse ne yapmalısın?

Derleyici noktalı virgülün gelmesi gereken yeri işaretler. Sorunun başladığı yer ise çoğu zaman bir önceki satırdır. İfade bitmemiş, tırnak açık ya da blok yarım kalmış olabilir. Derleyici bunu ancak sonraki satıra geçince fark eder ve hatayı orada bildirir. Bu yüzden işaretli satırdan bir önceki satıra bak.

Üç tipik örnek

1. Kapanmamış parantez:

Console.WriteLine("Merhaba"
int sayi = 5;

İlk satırda ) eksik. Derleyici ifadenin bittiğini sanıp sonraki satıra geçer ve orada sorun bildirir. Düzeltme ilk satırdadır: Console.WriteLine("Merhaba");

2. Kapanmamış string tırnağı:

string ad = "Ayşe;
Console.WriteLine(ad);

Kapanış tırnağı olmadığı için ; da string'in içinde kalır ve deyim bitmemiş görünür. Düzeltme: string ad = "Ayşe";

3. Eksik ya da fazla süslü parantez:

static void Main()
{
    int x = 5;
    if (x > 3)
    {
        Console.WriteLine("büyük");
    }}
    Console.WriteLine("bitti");
}

Fazladan } metodu erken kapatır. Sonraki satırlar metodun dışında kalır ve derleyici farklı hata mesajları üretebilir, bunların arasında CS1002 de olabilir. Düzeltme için if bloğunun kapanışına bak, fazla süslü parantezi sil.

Şüpheli satır mantığı

ÖrnekŞüpheli satırDerleyicinin takıldığı yer
ParantezAçık kalan çağrının satırıBir sonraki satırın başı
TırnakKapanmayan string'in satırıSatırın sonu ya da sonraki satır
Süslü parantezBlok kapanışının satırıBloktan sonraki ilk deyim

Üçünde de ortak nokta şudur: derleyici, kodun yanlış olduğunu yanlışın bittiği yerde değil, artık devam edemediği yerde söyler. Dosya adı, satır bilgisi, hata kodu ve mesajdan oluşan çıktıdaki satır bilgisini başlangıç noktası say, kesin adres sayma.

Satır satır teşhis sırası ve düzeltme kontrol listesi

Satır satır teşhis sırası ve düzeltme kontrol listesi

Hata listesi kalabalık göründüğünde şu sırayı izle:

  1. Hata listesinde en üstteki, yani ilk hatayı bul.
  2. İşaretli satırı baştan sona oku.
  3. Bir önceki satıra bak, ifade orada bitmiş mi?
  4. Parantez, tırnak ve süslü parantez dengesini kontrol et: açılan her işaretin bir kapanışı olmalı.
  5. Yalnızca bulduğun sorunu düzelt.
  6. Projeyi yeniden derle ve listeyi tekrar oku.

Zincirleme hatalar

Tek bir eksik noktalı virgül ya da parantez, derleyicinin sonraki satırları yanlış yorumlamasına yol açabilir. Listede onlarca hata görürsen çoğu aynı kaynaktan gelmiş olabilir. Bu yüzden her zaman ilk hatadan başla ve her düzeltmeden sonra yeniden derle. Düzeltme sonrası listenin kısalması, doğru yerde olduğunun iyi bir işaretidir.

Kısa kontrol listesi

  • Her deyimin sonunda ; var mı?
  • for başlığında iki noktalı virgül doğru yerde mi?
  • do { ... } while (koşul); satırı noktalı virgülle bitiyor mu?
  • String'lerin açılış ve kapanış tırnakları eşleşiyor mu?
  • Parantezler ve süslü parantezler dengeli mi?
  • Bir if, for ya da while satırının sonunda gereksiz ; kalmış mı?

Fazladan noktalı virgül: derlenir ama mantığı bozar

Eksik noktalı virgül derleyiciyi durdurur ve seni hataya yönlendirir. Fazla noktalı virgül ise çoğu zaman sessiz kalır. if satırının sonuna konan ; boş bir deyim oluşturur. Derleyici koşulun gövdesinin bu boş deyim olduğunu varsayar, alttaki satır da koşuldan bağımsız çalışan sıradan bir komut olur.

int sayi = 5;

if (sayi > 10);
    Console.WriteLine("Sayı 10'dan büyük.");

Beklenen çıktı:

Sayı 10'dan büyük.

sayi değeri 5 olduğu hâlde mesaj ekrana yazılır. Çünkü if yalnızca kendi satırındaki boş deyimi kontrol eder, Console.WriteLine ise koşulun dışında kalır. Girinti bu kodun if'e bağlıymış gibi görünmesine yol açar, ama derleyici girintiye bakmaz.

Doğru yazım şöyledir:

int sayi = 5;

if (sayi > 10)
{
    Console.WriteLine("Sayı 10'dan büyük.");
}

Bu sürümde koşul sağlanmadığı için ekrana hiçbir şey yazılmaz.

Derleyici bu tür durumlarda olası bir yanlış boş deyim için uyarı üretebilir. Uyarı hata gibi derlemeyi durdurmadığından gözden kaçması kolaydır. Uyarı listesini hata listesiyle birlikte okumak bu yüzden işe yarar. Aynı tuzak while ve for satırlarının sonunda da karşına çıkabilir. Tek komutluk gövdelerde bile süslü parantez kullanmak, satırın sonundaki yanlış ; işaretini daha görünür kılar.

DurumSonuçFark edilme biçimi
Eksik ;Derleme hatası (CS1002)Program çalışmadan önce görünür
Fazla ; (if sonunda)Derlenir, mantık bozulurÇıktıyı beklenenle karşılaştırınca anlaşılır

Sözdizimi hatalarını azaltan çalışma alışkanlıkları

Küçük parçalar hâlinde yazıp sık derlemek, CS1002 gibi hataları tek satıra indirir. Yirmi satırı bir seferde yazıp derlersen mesaj bu yirmi satırın herhangi birini işaret edebilir. Üç beş satırda bir derlediğinde ise şüpheli alan çok daha dar olur.

  • Kırmızı dalgalı çizgileri oku: Düzenleyicinin altını çizdiği yerin üzerine geldiğinde çıkan açıklama, derleyici mesajının erken bir halidir. Program çalıştırılmadan düzeltme fırsatı verir.
  • Girintiyi düzenli tut: Düzenleyicinin otomatik biçimlendirme özelliğini kullan. Girinti beklediğinden farklı görünüyorsa, bir süslü parantez ya da noktalı virgül yerinde değildir.
  • Açtığın şeyi hemen kapat: Parantez, tırnak ve süslü parantezi açar açmaz karşılığını yaz, sonra içini doldur. Önceki satırdaki eksik bir kapanış, hatanın sonraki satırda görünmesinin yaygın sebebidir.
  • Tek komutluk gövdede bile süslü parantez kullan: Önceki bölümdeki gibi sessiz mantık hatalarını görünür hâle getirir.

Sözdizimi hatalarını ayıklamak dil kurallarına aşinalıkla ilgilidir. Mantık kurma becerin ise ayrı bir konudur. İkisini ayrı ölçmek istersen ücretsiz bilgi testleri merkezindeki dilden bağımsız algoritmik düşünme testine ve diğer seviye testlerine bakabilirsin. Bu testler yalnızca mevcut seviyeni görmene yardım eder.

CS1002 ilk bakışta can sıkıcı görünse de çoğu zaman tek bir karakterle çözülür. Mesajı okuyup işaretli satırın biraz öncesine bakmak çoğu durumda yeterli olur.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara