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 Giris/ikis Fonksiyonlari

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

En son gncelleme: Wed, 30 Nov 2011 13:22:02 +0200

Giris

Temel giris/ikis fonksiyonlari, btn programla dillerinde mevcuttur. Bu tr fonksiyonlar, kullaniciya ekrana veya yaziciya bilgi yazdirmasina, ve bilgisayara klavyeden veri girisi yapmasina izin verir. Temel giris/ikis fonksiyonlari kullanilirken stdio.h baslik dosyasi programin basina eklenmelidir. Bu kisimda, en ok kullanilan giris/ikis fonksiyonlari anlatilacaktir.


4.1   printf() Fonksiyonu

Standart C ktphanesinde bulunan printf() fonksiyonu, degiskenlerin tuttugu degerleri, onlarin adreslerini veya bir mesaji ekrana belli bir dzenle (format) standart ikisa (stdout), yani ekrana, yazdirmak iin kullanilan fonksiyondur. Daha nce yazilan rnek programlarda printf() fonksiyonundan yararlanmistik. imdi bu fonksiyonun nasil kullanildigina bakalim.

Genel yazim biimi:
      int printf(const char *format, ...);

Basit olarak ekrana Hata olustu!.. seklinde bir mesaj yazirma islemi:

      printf("Hata Olustu!..");

seklindedir. ogu zaman ekrana, programda kullanilan bir degiskenin degeri yazdirilmak istenebilir. rnegin ekrana bir tamsayi degiskeninin ierigini basirimak iin, printf()

      ....
      int x = 12;
      printf("x in degeri %d dir", x);
      ....
gibi kullanilir. Bu program parasinin ekran iktisi syle olacaktir:
      x in degeri 12 dir

Bu rnekte printf fonksiyonuna iki parametre aktarilmistir. Birincisi ekranda gsterilecek ve ift tirnaklar arasina yazilan ifadeler, ikincisi ise ekranda sayisal degeri gsterilmek istenen degisken (x).

*format kisimdan olusmaktadir:

  1. Dz metin (literal string): yazdirilmak istenen ileti.
    rnegin: printf("Ben gelmedim kavga iin..."); gibi.

  2. Konrol karakterleri (escape squence): degiskenlerin ve sabitlerin nasil yazilacagini belirtmek veya imlecin alt satira geirilmesi gibi bazi islemlerin gereklestirilmesi iin kullanilir. Bu karakterler Tablo 4.1'de listelenmistir.
    rnegin: printf("\tDostun evi gnldr...\n"); gibi.

    Tablo 4.1: Kontrol karakterleri
    Karakter Anlami
    \a Ses retir (alert)
    \b imleci bir sola kaydir (backspace)
    \f Sayfa atla. Bir sonraki sayfanin basina ge (formfeed)
    \n Bir alt satira ge (newline)
    \r Satir basi yap (carriage return)
    \t Yatay TAB (horizontal TAB)
    \v Dikey TAB (vertical TAB)
    \" ift tirnak karakterini ekrana yaz
    \' Tek tirnak karakterini ekrana yaz
    \\ \ karakterini ekrana yaz
    %% % karakterini ekrana yaz

  3. Tip belirleyici (conversion specifier): % isareti ile baslar ve bir veya iki karakterden olusur (%d gibi). Ekrana yazdirilmak istenen degiskenin tipi, % isaretinden sonra belirtilir (Bkz. Tablo 4.2) rnegin: printf("x in degeri %d dir"); gibi.

    Tablo 4.2: Tip karakterleri
    Tip Karakteri Anlami Yazdirilacak veri tipi
    %c tek bir karakter char
    %s karakter dizisi (string) char
    %d isaretli ondalik tamsayi int, short
    %ld uzun isaretli ondalik tamsayi long
    %u isaretsiz ondalik tamsayi unsigned int, unsigned short
    %lu isaretsiz uzun tamsayi unsigned long
    %f Gerel sayi float
    %lf ift duayarli gerel sayi double

Tip karakterlerini kullanarak, birden ok veri tipi yazdirilabilir. rnegin:

      ...
      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. rnegin x ve y nin toplami syle yazilabilir:

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

printf fonksiyonu kullanimi Program 4.1'de verilmistir.

Program 4.1: printf() fonksiyonunun kullanimi
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
   Sayisal degerleri ekrana yazdirmak iin printf fonksiyonunun kullanimi */

#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 dns degeri int tipindedir. Bu geri dns degeri iktinin ka karakter oldugunu gsterir. Yani, printf fonksiyonu, *format ile tanimlanmis karakter toplulugunun ka bayt oldugu hesaplar[6]. Program 4.2, printf'in bu ynnde ortaya ikaran bir programdir.

Program 4.2: printf() fonksiyonunun kullanimi
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
/* 04prg02.c
   printf fonksiyonunun geri dns degerini gsterir */

#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. satirdaki islemle, hem ekrana Ugurlu sayim = 1234 iletisi bastirilmakta, hem de karSay degiskenine bu iletinin uzunlugu atanmaktadir. Ekrana basilan karakterlerin sayisi (\n karakteri dahil) 20 dir.


4.2   scanf() Fonksiyonu

Birok programda ekrana verilerin bastirilmasinin yanisira klavyeden veri okunmasi gerekebilir. scanf() fonksiyonu klavyeden veri okumak iin kullanilan fonksiyondur. printf() gibi scanf() fonksiyonuda Tablo 4.1 ve Tablo 4.2'de verilen karakterleri kullanir. rnegin klaveden bir x tamsayisi okumak iin:

      scanf("%d",&x);

satirini yazmak yeterli olacaktir. Burada & isareti adres operatr olarak adlandirilir ve Bm 11'de ayintili olarak aiklanacaktir. Klavyeden iki farkli sayi okunmak istendignde scanf() fonksiyonu syle kullanilabilir:

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

sekilinde girilebilir. Program 4.3'de scanf() fonsiyonunun kullanimi gsterilmistir.

Program 4.3: scanf() fonksiyonun kullanimi
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 okunmasi */

#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 yazdirilacak ifade bir karakter toplulugu ise, printf()'e alternatif olarak puts() fonksiyonu kullanilabilir. Ancak puts(), ekrana bu karakter toplulugu yazdiktan sonra, imleci alt satira geirir. Buna gre:

     printf("Sevgi varligin mayasidir.\n");
ile
     puts("Sevgi varligin mayasidir.");
kullanimlari esdegerdir.

puts() fonksiyonu Tablo 4.1 de verilen kontrol karakterleri ile kullanilabilir.

     puts("Bu birinci satir...\nBu ikinci satir.");
     Bu birinci satir...
     Bu ikinci satir.

4.4   gets() Fonksiyonu

Klavyeden bir karakter toplulugu okumak iin kullanilir. Okuma islemi yeni satir karakteriyle(\n) karsilasilincaya kadar srer. puts() - gets() arsindaki iliski, printf() - scanf() arasindaki gibidir. Yani,

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

ayni anlamdadir. puts() - gets() fonksiyonlarinin kullanimi daha sonra ayrintili islenecektir.


4.5   getchar() Fonksiyonu

Bu fonksiyon ile standart giristen bir karakter okunur. Programi istenen bir yerde dudurup, bir karakater girinceye kadar bekletir. rnegin:

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

Yukaridaki program parasi 0-9 arasi sayilari sirasiyla ekranda gstermek iin kullanilir. Fakat her rakami yazdirilmadan nce klavyeden herhangi bir karakter girip [Enter] tusuna basilmasi beklenir. Bu bekleme getchar() fonksiyonu ile gereklestirilir.


4.6   Formatli ikti

Bundan nceki programlardaki degiskenler serbest biimde (free format), yani derleyicinin belirledigi biimde ekrana yazdirilmisti. Bazen giris ve ikisin biimi kullanici tarafindan belirlenmesi gerekebilir. Bu islem:

Tamsayilarda %d yerine %wd
Gerel sayilarda %f yerine %w.kf
Stringlerde %s yerine %ws

biimindeki kullanim ile saglanir. Burada w yazilacak olan sayinin alan genisligi olarak adlandirilir. Gerel bir degisken ekrana yazilacaksa, degiskenin virglden sonra ka basamaginin yazdirilacagi k sayisi ile belirlenir. Ancak w > k + 2 olmalidir.

     int i=583,j=1453;

     printf("%d %d\n",i,j);    /* serbest biim */
     printf("%5d %8d\n",i,j);  /* formatli */
program parasinin ekran iktisi syledir:

IKTI

583 1453
  583     1453

Birinci satir serbest formatta ikinci satir ise formatli yazilmistir. i degiskeninin tuttugu 583 sayisi %5d formatiyla yazdirilinca, bu sayi iin 5 alan genisligi tanimlanir arakasindan sagdan baslayarak sayi bu alana yazilir. Benzer olarak j degiskeni, 8 alan genislikli bir blgeye yazilir.

Gerel sayilarda is biraz daha karisik. rnegin:
     int x=123.456;

     printf("%f\n",x);     /* serbest biim */
     printf("%8.2f\n",x);  /* formatli */
program parasi alistirildiginda asagidaki sonu gzlenir:

IKTI

123.456001
  123.46

Birinci satir serbest formatta ikinci satir ise formatli yazilmistir. Ikinci satirda x degiskeni iin ayrilan alan genisligi 8 ve noktadan sonra 2 basamaga kadar hassasiyet nemsenmistir. Dikkat edilirse noktadan sonra sayi uygun bir sekilde yuvarlanmis ve sayi saga dayali olarak yazilmistir.

Son olarak formatli ikti ile ilgili bir rnek Program 4.4'de verilmistir. Inceleyiniz.

Program 4.4: printf() in formatli kullanimi
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
/* 04prg04.c: Formatli ikti */

#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