Amiga Dünyası sayı 4, sayfa 37

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 37

Bu ayki yazıma, geçen sayıdaki birkaç basım hatasını düzelterek başlamak istiyorum. Birinci hata, printf'in değişik türdeki değişkenlerin basılmasını sağlamak için kullanılan sembollerden biri. Heksadesimal sayılar için X kullanılmalıdır. Ayrıca, küçük harfle başlaması gereken bazı satırlar büyük harfle başlamış. Geçen sayıda da belirttiğim gibi C'nin içerdiği tüm komutlar ve fonksiyonlar küçük harfle yazılmak zorunda. Son hata ise, beşinci kutuda. Programı kesmek için Ctrl- tuşlarına basmanız söylenmekte. Bunun doğrusu Ctrl- tuşları olacak.

Şimdi geçen ay kaldığımız yerden devam edelim ve geçen ay beşinci kutuda verdiğim programı inceleyelim:

Programda while döngüsünün içinde yeralan != işareti C dilinde "eşit değildir" anlamına gelir.

Programdaki asıl sorun, girişin bittiğinin belirtilebilmesidir. Genel olarak bu sorun, getchar'ın programa ilettiği değerin, anlamlı bir karakter olmamasını sağlayarak yapılır. Böylece programımız girişin sona erdiğini anlayabilir. Fakat burada bir sorun ortaya çıkmakta: Acaba standart olarak hangi sayı kullanılmalı? Bu soru, şu anda iki değişik biçimde yanıtlanıyor; bazıları değer olarak "0", bazıları ise "-1" kullanmakta. AmigaDos'- un kullandığı sayı bunlardan "-1". Programın başındaki:

define EOF -1 satırı, bu sayının tanımlanmasını sağlamakta. EOF terimi (EndOfFile = Tk.

Dosyanın Sonu), bu değeri belirtmek için kullanılan standart bir terim. Buradan da anlaşılabileceği gibi, C'de programın içinde sembolik sabitler tanımlamak programın başka makinelere uyarlanabilirliğini artırmakta. Çünkü eğer başka bir makinada EOF'un değeri farklı bir sayıysa; bu durumda değiştirmemiz gereken, sadece programın başındaki tanımlama satırıdır. Fakat sembolik sabit kullanmasaydık, programdaki değiştirilecek değerin geçtiği her satırı değiştirmek zorunda kalacaktır.

Dikkat edilecek başka bir konu ise, getchar fonksiyonunun çıktısının bir integer (Tk. Tamsayı) olan c değişkenine eşlenmiş olması. Demek ki, getchar fonksiyonu çıktı olarak bir karakter değil, o karaktere karşılık gelen bir tamsayı vermekte.

Daha önce de belirttiğim gibi, bir program birkaç değişik yoldan yazılabilir. Hele C gibi syntax'ı (Türkçe: Yazım kuralları) çok katı olmayan ve bu açıdan oldukça esnek olan bir dil elinizin altındaysa, örneğin text dosyaları kopyalama programımız oldukça kısaltılabilir. Çünkü herhangi bir eşleme, C'de program içindeki bir işlem sırasında kullanılabilir. Örneğin

c = getchar( )

eşlemesini bir while işlemi sırasında kullanırsak programımız birinci kutudaki gibi olur. Programın çalışması şöyledir: önce girişten bir karakter alınır ve c değişkenine eşlenir. Daha sonra c değişkeninin EOF'a eşit olup olmadığı kontrol edilir. Eğer değilse, while döngüsü çalıştırılır. Sonra while tekrar edilir, yani yeni bir karakter alınır, EOF'a eşit olup olmadığı kontrol edilir ve değilse ekrana basılır. Bu işlem c değişkeninin EOF'a eşit olmasıyla son bulur ve program durur.

Görüldüğü gibi C'de syntax fazla disipline edilmemiştir. Dolayısıyla C, bu açıdan oldukça esnek bir dildir. Fakat bu esneklik kötü tarafa kullanılıp anlaşılması zor programlar yazılabilir. Tabii ki bu istenmeyen bir durum.

Programdaki bir başka önemli nokta, koşullu test içindeki parantezlerin gerekliliği. != işaretinin önceliği, = işaretinin önceliğinden daha yüksek olduğundan, parantezleri koymamak yanlış sonuçların ortaya çıkmasını sağlardı. Çünkü, eğer parantezler konulmazsa işlem, c = getchar( ) != EOF yani, c = (getchar( )!=EOF) halini alacak ve bu da c değişkenine getchar fonksiyonunun EOF'a eşit olup olmamasına bağlı olarak, 1 ve 0 değerlerini verecekti ki, bu asıl yapmak istediğimiz işlem değil.

KARAKTER SAYMA Şimdi ki programımız kopyalama programının biraz değiştirilmiş hali ve karakterleri sayıyor. Programı ikinci kutuda bulabilirsiniz.

Programın içindeki: ++nc; satırı bize, bir artır anlamına gelen ++ operatörünü tanıtmakta. Burada diğer dillerde olduğu gibi nc = nc + 1 de yazabilirdiniz. Fakat ++nc hem daha kolay anlaşılır hem de genellikle dilin çalışma hızı açısından daha iyidir. C dilinde ++'ya karşılık olarak, bir eksilt anlamına gelen -- operatörü de vardır. Bu iki operatör hem değiştirilecek sayıdan

Klavyeyle gezinmek için ← ve → tuşları.