Biçimli Girdi Okumanın Temelleri
Önceki Biçimli Girdi Sonraki
Biçimli Girdi Okumanın Temelleri
scanf çağrıları argümanları bir şablon dizgenin denetimi altında okumasından dolayı yüzeysel olarak printf çağrılarına benzer. Şablon dizgedeki dönüşüm belirtimlerinin sözdizimleri printf işlevininkilere çok benzese de, şablonun yorumlanması sabit alanlı biçimlemeden ziyade daha bir serbest biçimli ve basit kalıp eşleştirme yönündedir. Örneğin, çoğu scanf dönüşümü dosyadaki boş alanları (boşluk, sekme, satırsonu) atlar ve çıktı dönüşümlerindekinin aksine sayısal girdi dönüşümleri için hassasiyet diye bir kavrama sahip değildir. Ekseriyetle, şablondaki boşluk olmayan karakterlerin girdi akımındaki karakterlerle eşleşeceği umulur, ancak bir eşleşmenin bulunamaması akım üzerindeki bir girdi hatası ile karıştırılmaz.
scanf ile printf arasındaki diğer bir farklı alan, scanf işlevinin isteğe bağlı argümanlarının doğrudan değer olarak değil göstericiler sağlayarak alındığını unutmamanız gerektiğidir; okunan değerler göstericilerin gösterdiği nesnelerde saklanır. Deneyimli yazılımcılar bile kimi zaman bunu unutur, eğer yazılımınız scanf ile ilgili olarak tuhaf hatalar veriyorsa bu özelliği için çifte kontrol yapmalısınız.
Bir eşleşme hatası oluştuğunda, scanf işlevi ilk eşleşmeyen karakteri akımdan okunacak sonraki karakter olarak bırakarak hemen döner. Normalde scanf işlevinden dönen değer atanmış değerlerin sayısıdır. Bu değere bakarak bir okunmamış karakter varsa eşleşme hatasının oluştuğu yeri bulabilirsiniz.
scanf işlevi genellikle, tabloların içeriklerini okumak gibi şeyler için kullanılır. Örneğin, buradaki işlev bir double dizisini ilklendirmek için scanf işlevini kullanmaktadır:
void
diziyioku (double *dizi, int n)
{
  int i;
  for (i = 0; i < n; i++)
    if (scanf (" %lf", &(dizi[i])) != 1)
      invalid_input_error ();
}
Biçimli girdi işlevleri, biçimli çıktı işlevleri kadar sık kullanılmazlar. Kısmen, onları düzgün olarak kullanmak biraz dikkat gerektirdiğindendir. Diğer bir sebep, bir eşleşme hatasından kurtulmanın zorluğudur.
Bir tek başına, sabit bir kalıpla eşleşmeyecek bir girdiyi okumaya çalışacaksanız, scanf kullanmaktansa, bir sözel tarayıcı üretmede Flex ya da bir çözümleyici üretmede Bison gibi bir araç kullanmak sizin için daha iyi olabilir. Bu araçlar hakkında bilgi almak için Bison.info ve Flex.info'ya bakabilirsiniz.
Önceki Üst Ana Başlık Sonraki
Biçimli Girdi Başlangıç Girdi Dönüşüm Sözdizimi
Bir Linux Kitaplığı Sayfası