etasarim avatar

Kullanıcıdan Input Alma - C Programlama Dili

etasarim

Published: 01 Mar 2019 › Updated: 01 Mar 2019Kullanıcıdan Input Alma - C Programlama Dili

Kullanıcıdan Input Alma - C Programlama Dili

C dili derslerinin bu dersinde kullanıcıdan input alma üzerine duracağım. Yazılan programlar, nihayetinde kullanıcıların kullanımı için yazılıyor. Hal böyle olunca kullanıcıdan veri istemek çok doğal bir süreç haline geliyor. Neyse bu kadar giriş sanırım yeterli. Bu dersimizde C dilinde kullanıcıdan input almak için kullanılan şu fonksiyonların anlatımını ve uygulamalarını bulacaksınız :

  • getchar() fonksiyonu
  • getche() fonksiyonu
  • getch() fonksiyonu
  • scanf() fonksiyonu
  • gets() fonksiyonu

getchar() Fonksiyonu

getchar() fonksiyonu klavyeden bir karakterlik veri okumak için kullanılır. Bu fonksiyon, standart input output kütüphanesi içerisinde bulunup stdio.h header dosyası içerisinde tanımlanmıştır. Dolayısıyla bu fonksiyonu kullanmak için bu header dosyasını kodumuza dahil etmeliyiz.

Bu fonksiyon çağrıldığında klavyeden bir karakter girilmesini bekler.( cursor yanıp söner). Girilen karakter ekrana yazılır ama fonksiyonun karakteri okuması için Enter tuşuna basmanız gerekir. Enter tuşuna bastığınızda karakter bellekteki değişkene atanır ve program bir sonraki satıra/statements geçer. Süreç böyle. Şimdi de uygulamasına bakalım.

alt

Uygulamamızı çalıştırdığımızda aşağıdaki gibi bir çıktı alırız :

alt

Görüldüğü gibi ekrana ilk olarak "Yapılan işlemi onaylıyor musunuz (Y/N) : sorusu geliyor. Sonrasında kullanıcı y harfine basıp Enter'a bastığında girilen karakter cevap değişkenine atanıyor. Son olarak cevap değişkenin değeri printf fonksiyonu kullanılarak ekrana yazılıyor.

Görüldüğü gibi getchar() fonksiyonu, Enter tuşuna basana kadar işlem yapmayacaktır. Peki Enter’a basana kadar birden fazla karaktere basarsanız ne olur, bundan bahsedelim.

getchar() fonksiyonu, siz klavyeden Enter tuşuna basana kadar girdiğiniz tüm değerleri klavyenin tampon belleğine atar. Ve sadece ilk girilen karakteri okur.  Ancak siz peş peşe getchar() fonksiyonunu çağırırsanız sırayla gelen karakterleri  çağrılan fonksiyonlara atayacaktır.

Örnek üzerinden gidelim :

alt

Uygulamamızın çıktısı aşağıdaki gibidir :

alt

Uygulamanın başında char yani karakter tipinde 3 değişken tanımladık : c1, c2, c3. Sonrasında printf fonksiyonu kullanarak kullanıcıdan 3 karakter girmesini istedik : ets. Daha sonra 3 adet getchar() fonksiyonu çağırıp bunlardan gelen karakterleri c1,c2 ve c3 e atadık. Ve uygulamanın sonunda bu değişkenlerin içeriğini ekrana yazdırmış olduk.

Umarım bu fonksiyon anlaşılmıştır.

getche() Fonksiyonu

getche() fonksiyonu, temel olarak getchar() fonksiyonu ile aynı işi yapar. Yani klavyeden tek bir karakter okur. getchar() fonksiyonundan farkı , Enter tuşuna basılmasını beklemez. Kişi, bir karakter girer girmez girilen karakteri belirlenen değişkene atar ve klavyeden okuma işlemi sona erer. Uygulama bir sonraki statement dan devam eder. Son bir şey bu fonksiyonu kullanabilmek için conio.h dosyasını include etmek gerekir.

Şimdi de uygulamasını görelim :

alt

Uygulamamızın çıktısı aşağıdaki gibidir :

alt

Klavyeden 'y' karakterini basar basmaz, Enter a basmamıza gerek kalmadan uygulama bir sonraki satırdan devam edip ekrana atanan karakteri basmış oldu.

Bu fonksiyonun çoklu kullanımı(birden fazla karakter okuma) ise aşağıdaki gibidir :

alt

Çıktımız :

alt

getch() Fonksiyonu

getch() fonksiyonu da diğer 2 fonksiyon gibi klavyeden tek karakter okumak için kullanılır. Çalışma prensibi olarak getche() fonksiyonunun birebir aynısıdır. Ancak getch() fonksiyonunda girilen karakter, girildiğinde ekranda gözükmez. Linux sistemlerde şifre girdiğiniz zamanları düşünün.

Yukarıdaki uygulamayı hiç değiştirmeden bu fonksiyon için uyarlarsak, farkı daha iyi anlarız.

alt
alt

Görüldüğü gibi kullanıcının klavyeden girdiği "ets" karakterleri çıktıda gözükmemektedir. Bunun amacını sorgulayanlar için belirteyim, şifre işlemlerinde şifrenin gözükmemesini sağladığından tamamen güvenlik amaçlıdır.

scanf() Fonksiyonu

scanf() fonksiyonu, klavyeden girilen değeri almak için kullanılır. Bu değer her şey olabilir, bir kısıtlama yok yani. Klavyeden girilen değer int ya da benzeri bir tip ise %d, float ise %f, karakter ise %c ve string ise %s ifadeleri kullanılır. Standart Input Output kütüphanesinin elemanı olduğundan farklı bir kütüphaneye gerek yoktur.

Kullanımında yukarıdaki % ifadeleri çift tırnak içerisinde “” verilirken, değişkenin kendi yerine adresi anlamına gelen &degisken_ismi kullanılır.

scanf("%d", &degisken_ismi);

Program scanf( ) fonksiyonuna geldiğinde kullanıcıdan Enter’a basılmasını bekler. Basıldıktan sonra girilen değer bellekteki değişkene atanır ve program bir sonraki statement a geçer.

Şimdi bir uygulama ile int, float ve character değer okuması yapalım :

alt

Uygulamamızın çıktısı aşağıdaki gibidir :

alt

Bu uygulamada dikkat edilmesi gereken kısım; peşpeşe int, float gibi verileri okuttuktan sonra bufferı boşaltmadan char okutmaya kalkışmaktır.

Kod kısmında herhangi bir sorun gözükmese de char okumaya geldiğinde char değişkenine değer atamak için bizden değer almayacak hali hazırda bufferda bulunan enter ‘\n’ karakterini atayacaktır. Bunu aşmanın iki yolu vardır.

1.Yol : Yukarıdaki koddaki gibi char değişkeni okunacaksa okuma işlemi sırasında scanf içerisinde %c karakterinden önce bir boşluk bırakmaktır.

2.Yol : İki scanf() arasında fflush(stdin); fonksiyonunu çağırarak tampon belleği boşaltmaktır. (Bu yol bende çalışmadı sebebini anlamadım. İlerde bulursam paylaşırım.)

Şimdi de scanf() fonksiyonu ile string okuma işlemi nasıl yapılır ondan bahsedelim. Öncesinde Stringler ile alakalı ufak bir bilgi verelim.

Daha öncesinde değişkenler dersinden gördüğümüz üzere C dilinde String adında bir veri tipi yok. Bunun yerine “Stringler, aslında karakter dizileridir” tanımına uyarak char tipinde diziler kullanırız, string değer tutmak için. Stringlerde son karakter “\0” null karakteridir. Yani derleyici bu karakteri görünce string in sonuna geldiğini anlar. (End Of File EOF gibi) Dolayısıyla eğer okumak istediğimiz text ifade 40 karakterli ise bizim oluşturacağımız dizi 41 karakter olmalıdır.

Şimdi uygulama kısmına geçelim :

alt

Çıktımız ise şöyledir :

alt

Kodlama kısmında scanf() kullanımı ile alakalı ampersand & işaretinin kullanılmadığını görüyoruz. Bunun sebebi dizilerde dizi adreslerinin dizi ismi olmasından ileri geliyor.

Sonuca baktığımızda ise string ifade olarak "Ali Veli Deli" girmemize rağmen çıktıda sadece "Ali" ismini gördük. Bunun sebebi

"scanf() fonksiyonunun girilen string değerde boşluk karakterine kadar okuma yapmasıdır. "

Bu şekilde düşündüğümüzde Ali isminden sonra boşluk değerini gördüğünde okuma işlemini bırakacaktır.

scanf() fonksiyonuna boşlukları da okutmak isterseniz %s yerine %[^\n]s ifadesini kullanmalısınız.

Bu haliyle aynı uygulamayı düzenleyelim :

alt

Çıktımız ise şöyle olacaktır :

alt

Görüldüğü gibi scanf() fonksiyonu ile komple bir string değeri okutabildik.

String okuma noktasında scanf() fonksiyonuna alternatif bir fonksiyon var. Dersimizi bitirmeden önce ondan da bahsetmek istiyorum.

gets() Fonksiyonu

gets() fonksiyonu, klavyeden girilen string değerleri okumak için kullanılır. Klavyeden Enter'a basılana kadar olan tüm değerleri tek bir string ifade kabul ederek alır. Ancak dizi boyutu kontrolü yapmama gibi bir dezavantajı vardır.

Uygulamasını görelim. Bu uygulamada printf() alternatifi olan puts() fonksiyonu kullanılacaktır.

alt

Çıktımız ise aşağıdaki gibidir :

alt

Son uygulamamız ile gets() fonksiyonunun da kullanımını öğrenmiş olduk.

Bugünlük bu kadar, umarım faydalı bir çalışma olmuştur.

Uygulama noktasında herhangi bir sorun yaşarsanız aşağıdaki yorum panelini kullanarak iletişime geçmekten çekinmeyin lütfen. Teşekkürler.

alt

Kaynak belirtilmeyen görseller etasarim@etasarim a aittir. / Pictures that don’t have any source belongs to etasarim@etasarim.


Posted from my blog with SteemPress : http://etasarim.cloudaccess.host/01/03/2019/kullanicidan-input-alma-c-programlama-dili/

Leave Kullanıcıdan Input Alma - C Programlama Dili to:

Written by

Ekip hesabıdır. | We are a designer group. (Adobe Photoshop, Adobe Illustrator), and photographer

Read more #tr posts


Best Posts From etasarim

We have not curated any of etasarim's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From etasarim