C Programlama Dili'ne Giriş

  Dersler
* Önsöz

* Giriş
* Veri Tipleri, Değişkenler
* Operatörler
* Temel G/Ç Fonksiyonları
* Temel Kütüphane Fonksiyonları
* Karşılaştırma Deyimleri
* Döngüler
* Fonksiyonlar I
* Fonksiyonlar II
* Diziler
* Gösterici (Pointer) Kavramı
* Katarlar (Stringler)
* Dinamik Bellek Yönetimi
* Gösterici Uygulamaları
* Yapılar ve Birlikler
* Dosya Yönetimi
* Bit Düzeyinde Çalışmak
* Port Denetimi
* Grafik Kullanımı
* C Makroları

* Kısaca C++
* Derleme Seçenekleri
* Tarih-Saat Fonksiyonları
* Monte-Carlo Yöntemleri
* Fortran ve C

* Yararlanılan Kaynaklar

  C/C++ Derleyicileri
* Dev-C++
* Salford (silversoft FTN95)
* GCC
* Turbo C
* Eclipse IDE
* NetBeans IDE

  Dış Bağlantılar
* programlama.com
* C Programcıları Derneği

* C (wikipedia)
* C++ (wikipedia)
* cplusplus.com
* koders.com
* Hot scripts

 

Ders 4: Temel Giriş/Çıkış Fonksiyonları

###################- (%95)

En son güncelleme: Wed, 30 Nov 2011 13:22:02 +0200

Giriş

Temel giriş/çıkış fonksiyonları, bütün programla dillerinde mevcuttur. Bu tür fonksiyonlar, kullanıcıya ekrana veya yazıcıya bilgi yazdırmasına, ve bilgisayara klavyeden veri girişi yapmasına izin verir. Temel giriş/çıkış fonksiyonları kullanılırken stdio.h başlık dosyası programın başına eklenmelidir. Bu kısımda, en çok kullanılan giriş/çıkış fonksiyonları anlatılacaktır.


4.1   printf() Fonksiyonu

Standart C kütüphanesinde bulunan printf() fonksiyonu, değişkenlerin tuttuğu değerleri, onların adreslerini veya bir mesajı ekrana belli bir düzenle (format) standart çıkışa (stdout), yani ekrana, yazdırmak için kullanılan fonksiyondur. Daha önce yazılan örnek programlarda printf() fonksiyonundan yararlanmıştık. Şimdi bu fonksiyonun nasıl kullanıldığına bakalım.

Genel yazım biçimi:
      int printf(const char *format, ...);

Basit olarak ekrana Hata oluştu!.. şeklinde bir mesaj yazırma işlemi:

      printf("Hata Oluştu!..");

şeklindedir. Çoğu zaman ekrana, programda kullanılan bir değişkenin değeri yazdırılmak istenebilir. Örneğin ekrana bir tamsayı değişkeninin içeriğini basırımak için, printf()

      ....
      int x = 12;
      printf("x in değeri %d dir", x);
      ....
gibi kullanılır. Bu program parçasının ekran çıktısı şöyle olacaktır:
      x in değeri 12 dir

Bu örnekte printf fonksiyonuna iki parametre aktarılmıştır. Birincisi ekranda gösterilecek ve çift tırnaklar arasına yazılan ifadeler, ikincisi ise ekranda sayısal değeri gösterilmek istenen değişken (x).

*format üç kısımdan oluşmaktadır:

  1. Düz metin (literal string): yazdırılmak istenen ileti.
    Örneğin: printf("Ben gelmedim kavga için..."); gibi.

  2. Konrol karakterleri (escape squence): değişkenlerin ve sabitlerin nasıl yazılacağını belirtmek veya imlecin alt satıra geçirilmesi gibi bazı işlemlerin gerçekleştirilmesi için kullanılır. Bu karakterler Tablo 4.1'de listelenmiştir.
    Örneğin: printf("\tDostun evi gönlüdür...\n"); gibi.

    Tablo 4.1: Kontrol karakterleri
    Karakter Anlamı
    \a Ses üretir (alert)
    \b imleci bir sola kaydır (backspace)
    \f Sayfa atla. Bir sonraki sayfanın başına geç (formfeed)
    \n Bir alt satıra geç (newline)
    \r Satır başı yap (carriage return)
    \t Yatay TAB (horizontal TAB)
    \v Dikey TAB (vertical TAB)
    \" Çift tırnak karakterini ekrana yaz
    \' Tek tırnak karakterini ekrana yaz
    \\ \ karakterini ekrana yaz
    %% % karakterini ekrana yaz

  3. Tip belirleyici (conversion specifier): % işareti ile başlar ve bir veya iki karakterden oluşur (%d gibi). Ekrana yazdırılmak istenen değişkenin tipi, % işaretinden sonra belirtilir (Bkz. Tablo 4.2) Örneğin: printf("x in değeri %d dir"); gibi.

    Tablo 4.2: Tip karakterleri
    Tip Karakteri Anlamı Yazdırılacak veri tipi
    %c tek bir karakter char
    %s karakter dizisi (string) char
    %d işaretli ondalık tamsayı int, short
    %ld uzun işaretli ondalık tamsayı long
    %u işaretsiz ondalık tamsayı unsigned int, unsigned short
    %lu işaretsiz uzun tamsayı unsigned long
    %f Gerçel sayı float
    %lf Çift duayarlı gerçel sayı double

Tip karakterlerini kullanarak, birden çok veri tipi yazdırılabilir. Örneğin:

      ...
      int    not= 12;
      float  pi = 3.14;
      char   kr = 'A';

      printf(" not = %d , pi = %f ve kr = %c dir", not, pi, kr);
      ...
gibi.

printf() fonksiyonu esnektir. Parametreler herhangi bir C deyimi olabilir. Örneğin x ve y nin toplamı şöyle yazılabilir:

      printf("%d", x+y);

printf fonksiyonu kullanımı Program 4.1'de verilmiştir.

Program 4.1: printf() fonksiyonunun kullanımı
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
/* 04prg01.c
   Sayısal değerleri ekrana yazdırmak için printf fonksiyonunun kullanımı */

#include <stdio.h>

main()
{

   int   a = 2,    b = 10,   c = 50;
   float f = 1.05, g = 25.5, h = -0.1, yuzde;

    printf("3 tamsayi       : %d %d %d\n", a, b, c);
    printf("3 tamsayi [TAB] : %d \t%d \t%d\n", a, b, c);

    printf("\n");

    printf("3 reel sayi (yanyana) : %f %f %f\n", f, g, h);
    printf("3 reel sayi (altalta) : \n%f\n%f\n%f\n\n", f, g, h);

    yuzde = 220 * 25/100.0;
    printf("220 nin %%25 i %f dir\n", yuzde);
    printf("%f/%f isleminin sonucu = %f\n", g, f, g / f);

    printf("\nprogram sonunda beep sesi cikar...\a");

    return 0;
}

ÇIKTI

3 tamsayi       : 2 10 50
3 tamsayi [TAB] : 2     10      50

3 reel sayi (yanyana) : 1.050000 25.500000 -0.100000
3 reel sayi (altalta) :
1.050000
25.500000
-0.100000

220 nin %25 i 55.000000 dir
25.500000/1.050000 isleminin sonucu = 24.285715

program sonunda beep sesi cikar...

printf fonksiyonunun geri dönüş değeri int tipindedir. Bu geri dönüş değeri çıktının kaç karakter olduğunu gösterir. Yani, printf fonksiyonu, *format ile tanımlanmış karakter topluluğunun kaç bayt olduğu hesaplar[6]. Program 4.2, printf'in bu yönünüde ortaya çıkaran bir programdır.

Program 4.2: printf() fonksiyonunun kullanımı
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
/* 04prg02.c
   printf fonksiyonunun geri dönüş değerini gösterir */

#include <stdio.h>

int main()
{
   int karSay;
   int sayi = 1234;

   karSay = printf("Ugurlu sayim = %d\n",sayi);

   printf("Ust satirda karakter sayisi: %d dir\n", karSay);

   return 0;
}

ÇIKTI

Ugurlu sayim = 1234
Ust satirda karakter sayisi: 20 dir

11. satırdaki işlemle, hem ekrana Ugurlu sayim = 1234 iletisi bastırılmakta, hem de karSay değişkenine bu iletinin uzunluğu atanmaktadır. Ekrana basılan karakterlerin sayısı (\n karakteri dahil) 20 dir.


4.2   scanf() Fonksiyonu

Birçok programda ekrana verilerin bastırılmasının yanısıra klavyeden veri okunması gerekebilir. scanf() fonksiyonu klavyeden veri okumak için kullanılan fonksiyondur. printf() gibi scanf() fonksiyonuda Tablo 4.1 ve Tablo 4.2'de verilen karakterleri kullanır. Örneğin klaveden bir x tamsayısı okumak için:

      scanf("%d",&x);

satırını yazmak yeterli olacaktır. Burada & işareti adres operatörü olarak adlandırılır ve Böüm 11'de ayıntılı olarak açıklanacaktır. Klavyeden iki farklı sayı okunmak istendiğnde scanf() fonksiyonu şöyle kullanılabilir:

      scanf("%d %f",&x,&y);
veriler klavyeden
      16 1.56
yada
      16    1.56
veya
      16 
      1.56

şekilinde girilebilir. Program 4.3'de scanf() fonsiyonunun kullanımı gösterilmiştir.

Program 4.3: scanf() fonksiyonun kullanımı
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
/* 04prg03.c
    scanf() fonksiyonu ile int ve float tipindeki verilerin okunması */

#include <stdio.h>

main()
{
    int    t;
    float  g;

    printf("Bir gercel sayi girin: "); scanf("%f",&g);
    printf("Bir tamsayi girin    : "); scanf("%d",&t);

    printf("\n");

    printf("\t %f * %f = %f\n",g,g,g*g);
    printf("\t %d * %d = %d\n",t,t,t*t);

 return 0;
}

ÇIKTI

Bir gercel sayi girin: 1.34
Bir tamsayi girin    : 12

         1.340000 * 1.340000 = 1.795600
         12 * 12 = 144


4.3   puts() Fonksiyonu

Ekrana yazdırılacak ifade bir karakter topluluğu ise, printf()'e alternatif olarak puts() fonksiyonu kullanılabilir. Ancak puts(), ekrana bu karakter topluluğu yazdıktan sonra, imleci alt satıra geçirir. Buna göre:

     printf("Sevgi varlığın mayasıdır.\n");
ile
     puts("Sevgi varlığın mayasıdır.");
kullanımları eşdeğerdir.

puts() fonksiyonu Tablo 4.1 de verilen kontrol karakterleri ile kullanılabilir.

     puts("Bu birinci satır...\nBu ikinci satır.");
     Bu birinci satır...
     Bu ikinci satır.

4.4   gets() Fonksiyonu

Klavyeden bir karakter topluluğu okumak için kullanılır. Okuma işlemi yeni satır karakteriyle(\n) karşılasılıncaya kadar sürer. puts() - gets() arsındaki ilişki, printf() - scanf() arasındaki gibidir. Yani,

     scanf("%s",str);
ile
     gets(str);

aynı anlamdadır. puts() - gets() fonksiyonlarının kullanımı daha sonra ayrıntılı işlenecektir.


4.5   getchar() Fonksiyonu

Bu fonksiyon ile standart girişten bir karakter okunur. Programı istenen bir yerde dudurup, bir karakater girinceye kadar bekletir. Örneğin:

     ...
     for(i=0; i<10; i++)
     {
        getchar();
        printf("%d\n",i);
     }
     ...

Yukarıdaki program parçası 0-9 arası sayıları sırasıyla ekranda göstermek için kullanılır. Fakat her rakamı yazdırılmadan önce klavyeden herhangi bir karakter girip [Enter] tuşuna basılması beklenir. Bu bekleme getchar() fonksiyonu ile gerçekleştirilir.


4.6   Formatlı Çıktı

Bundan önceki programlardaki değişkenler serbest biçimde (free format), yani derleyicinin belirlediği biçimde ekrana yazdırılmıştı. Bazen giriş ve çıkışın biçimi kullanıcı tarafından belirlenmesi gerekebilir. Bu işlem:

Tamsayılarda %d yerine %wd
Gerçel sayılarda %f yerine %w.kf
Stringlerde %s yerine %ws

biçimindeki kullanım ile sağlanır. Burada w yazılacak olan sayının alan genişliği olarak adlandırılır. Gerçel bir değişken ekrana yazılacaksa, değişkenin virgülden sonra kaç basamağının yazdırılacağı k sayısı ile belirlenir. Ancak w > k + 2 olmalıdır.

     int i=583,j=1453;

     printf("%d %d\n",i,j);    /* serbest biçim */
     printf("%5d %8d\n",i,j);  /* formatlı */
program parçasının ekran çıktısı şöyledir:

ÇIKTI

583 1453
  583     1453

Birinci satır serbest formatta ikinci satır ise formatlı yazılmıştır. i değişkeninin tuttuğu 583 sayısı %5d formatıyla yazdırılınca, bu sayı için 5 alan genişliği tanımlanır arakasından sağdan başlayarak sayı bu alana yazılır. Benzer olarak j değişkeni, 8 alan genişlikli bir bölgeye yazılır.

Gerçel sayılarda iş biraz daha karışık. Örneğin:
     int x=123.456;

     printf("%f\n",x);     /* serbest biçim */
     printf("%8.2f\n",x);  /* formatlı */
program parçası çalıştırıldığında aşağıdaki sonuç gözlenir:

ÇIKTI

123.456001
  123.46

Birinci satır serbest formatta ikinci satır ise formatlı yazılmıştır. İkinci satırda x değişkeni için ayrılan alan genişliği 8 ve noktadan sonra 2 basamağa kadar hassasiyet önemsenmiştir. Dikkat edilirse noktadan sonra sayı uygun bir şekilde yuvarlanmış ve sayı sağa dayalı olarak yazılmıştır.

Son olarak formatlı çıktı ile ilgili bir örnek Program 4.4'de verilmiştir. İnceleyiniz.

Program 4.4: printf() in formatlı kullanımı
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
/* 04prg04.c: Formatlı çıktı */

#include <stdio.h>

main()
{
   float  x = 7324.25, y = 244.531;
   int    i = 1299;
   char  *c = "Merhaba C";

   printf("%10d\n"  ,i);
   printf("%10s\n"  ,c);

   printf("%10.5f\n",x);
   printf("%10.1f\n",y);

  return 0;
}

ÇIKTI

      1299
 Merhaba C
7324.25000
     244.5



Powered by PHP