<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5415261736344872625</id><updated>2011-11-27T16:04:47.016-08:00</updated><category term='c de bir program kodu'/><category term='C ye giris yapalım'/><category term='c kodları'/><category term='alfabe kodu'/><category term='word list'/><category term='cdiliogren'/><category term='c dosyalama'/><category term='c de Kütüklerin Kullanımı c de kütükler'/><category term='eczane program kodları'/><category term='Word Listesi kodu'/><category term='c de dosyalar'/><category term='c kütükler'/><category term='c de eczane programı'/><category term='c pointer'/><category term='c FONKSİYONLAR'/><category term='Eczane Programı'/><category term='eczane prog'/><category term='yılan oyunun kod c++'/><title type='text'>c programları</title><subtitle type='html'>DOSYALAR,FONKSİYONLAR,C DİLİNİ KULLANARAK PROGROGRAMLAMA,C-PROGRAMLARİ</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-8555729399828550356</id><published>2008-10-17T14:15:00.000-07:00</published><updated>2008-10-17T14:17:53.417-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cdiliogren'/><title type='text'>Web de Yenilik</title><content type='html'>C programlama dili için yapılmış &lt;a href="http://cdiliogren.blogspot.com"&gt;cdiliogren.blogspot.com &lt;/a&gt;sitesi acılmıştır ziyarecilere ve c ile ilgilenen yazılımcılara duyurulur&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-8555729399828550356?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/8555729399828550356/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=8555729399828550356' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/8555729399828550356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/8555729399828550356'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2008/10/web-de-yenilik.html' title='Web de Yenilik'/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-8313182952771940622</id><published>2008-10-10T14:25:00.001-07:00</published><updated>2008-10-13T12:58:39.745-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c de bir program kodu'/><title type='text'>c de bir program kodu </title><content type='html'>#include &lt;dos.h&gt; &lt;br /&gt;#include &lt;windows.h&gt; &lt;br /&gt;#include &lt;time.h&gt; &lt;br /&gt;#include &lt;cstdlib&gt; &lt;br /&gt;#include &lt;iostream&gt; &lt;br /&gt;#include &lt;string&gt; &lt;br /&gt;&lt;br /&gt;using namespace std; &lt;br /&gt;int main(int argc,char *argv[]) &lt;br /&gt;{ &lt;br /&gt;system("TITLE EN BÜYÜK                                                                        BEŞİK TAŞ                                  KARA KARTAL"); &lt;br /&gt;//+++++++++++++++++++++++++++++++++++++++++++++++ &lt;br /&gt;&lt;br /&gt;// 1 - BİRİNCİ KOMUT AŞAMASI. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;float s,h1,h2,sonuc; &lt;br /&gt;&lt;br /&gt;geri: &lt;br /&gt;&lt;br /&gt;system("color 9f"); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                                                             [X]"&lt;&lt;endl;cout&lt;&lt;"                                    [ OuZ 1.2 ]\n"&lt;&lt;endl;Sleep(1000); cout&lt;&lt;"                   !!! HESAP MAKiNESi PROGRAMINA HOSGELDiNiZ !!!\n"&lt;&lt;endl;Sleep(3000); cout&lt;&lt;"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"&lt;&lt;endl;cout&lt;&lt;"                              [1] TOPLAMA + iSLEMi\n"&lt;&lt;endl;cout&lt;&lt;"                              [2] CIKARMA - iSLEMi\n"&lt;&lt;endl;cout&lt;&lt;"                              [3] CARPMA  * iSLEMi\n"&lt;&lt;endl;cout&lt;&lt;"                              [4] BOLME   / iSLEMi\n"&lt;&lt;endl;cout&lt;&lt;"                              [5] iPTAL   x iSLEMi\n"&lt;&lt;endl;cout&lt;&lt;"\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"&lt;&lt;endl;Sleep(2000); cout&lt;&lt;"Lutfen Bir Uygulama Giriniz   [1] [2] [3] [4] [5] : ";cin&gt;&gt;s; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// 2 - İKİNCİ KOMUT AŞAMASI. &lt;br /&gt;&lt;br /&gt;if(s==1) &lt;br /&gt;{ &lt;br /&gt;&lt;br /&gt;system("cls"); &lt;br /&gt;&lt;br /&gt;system("color 1f"); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"\n\n\n\n\n\n\n"&lt;&lt;endl;cout&lt;&lt;"\n                              [1] TOPLAMA + iSLEMi\n"&lt;&lt;endl;cout&lt;&lt;"iSLEM GiRiNiZ +                           ";cin&gt;&gt;h1; &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                          +"&lt;&lt;endl;cout&lt;&lt;"                                          ";cin&gt;&gt;h2; &lt;br /&gt;&lt;br /&gt;sonuc=(h1+h2); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                          ="&lt;&lt;endl;cout&lt;&lt;"iSLEM SONUCU  =                           "&lt;&lt;sonuc;Sleep(4000); system("cls"); goto geri; }        // 3 - KOMUT AŞAMASI. else if(s==2) { system("cls"); system("color 4f"); cout&lt;&lt;"\n\n\n\n\n\n\n"&lt;&lt;endl;cout&lt;&lt;"\n                              [2] CIKARMA + iSLEMi\n"&lt;&lt;endl;cout&lt;&lt;"iSLEM GiRiNiZ -                           ";cin&gt;&gt;h1; &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                          -"&lt;&lt;endl;cout&lt;&lt;"                                          ";cin&gt;&gt;h2; &lt;br /&gt;&lt;br /&gt;sonuc=(h1-h2); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                          ="&lt;&lt;endl;cout&lt;&lt;"iSLEM SONUCU  =                           "&lt;&lt;sonuc;Sleep(4000); system("cls"); goto geri; }        // 4 - KOMUT AŞAMASI. else if(s==3) { system("cls"); system("color 5f"); cout&lt;&lt;"\n\n\n\n\n\n\n"&lt;&lt;endl;cout&lt;&lt;"\n                              [3] CARPMA + iSLEMi\n"&lt;&lt;endl;cout&lt;&lt;"iSLEM GiRiNiZ *                           ";cin&gt;&gt;h1; &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                          *"&lt;&lt;endl;cout&lt;&lt;"                                          ";cin&gt;&gt;h2; &lt;br /&gt;&lt;br /&gt;sonuc=(h1*h2); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                          ="&lt;&lt;endl;cout&lt;&lt;"iSLEM SONUCU  =                           "&lt;&lt;sonuc;Sleep(4000); system("cls"); goto geri; }        // 5 - KOMUT AŞAMASI. else if(s==4) { system("cls"); system("color 2f"); cout&lt;&lt;"\n\n\n\n\n\n\n"&lt;&lt;endl;cout&lt;&lt;"\n                              [4] BOLME + iSLEMi\n"&lt;&lt;endl;cout&lt;&lt;"iSLEM GiRiNiZ /                           ";cin&gt;&gt;h1; &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                          /"&lt;&lt;endl;cout&lt;&lt;"                                          ";cin&gt;&gt;h2; &lt;br /&gt;&lt;br /&gt;sonuc=(h1/h2); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                          ="&lt;&lt;endl;cout&lt;&lt;"iSLEM SONUCU  =                           "&lt;&lt;sonuc;Sleep(4000); system("cls"); goto geri; }        // 6 - KOMUT AŞAMASI. else if((s&gt;5)||(s&lt;0)||(s&lt;=0))&lt;br /&gt;{ &lt;br /&gt;&lt;br /&gt;system("cls"); &lt;br /&gt;&lt;br /&gt;system("color 0a"); &lt;br /&gt;&lt;br /&gt;Sleep(5000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"\n\n\n\n\n\n\n\n\n\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                    !!! LUTFEN DOGRU BiR UYGULAMA GiRiNiZ !!!\n"&lt;&lt;endl;   &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                   [1][2][3][4][5]"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(5000); &lt;br /&gt;&lt;br /&gt;system("cls"); &lt;br /&gt;&lt;br /&gt;goto geri; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;// 7 - KOMUT AŞAMASI. &lt;br /&gt;&lt;br /&gt;else if(s==5) &lt;br /&gt;{ &lt;br /&gt;&lt;br /&gt;system("cls"); &lt;br /&gt;&lt;br /&gt;system("color f0"); &lt;br /&gt;&lt;br /&gt;Sleep(3000); &lt;br /&gt;cout&lt;&lt;"\n\n\n\n\n\n\n"&lt;&lt;endl;&lt;br /&gt;cout&lt;&lt;"                         HESAP MAKiNESi PROGRAMI [ OuZ 1.2 ]\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"EVET ARKADASLAR HESAP MAKiNESi PROGRAMI HAZIR.\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(3000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"ONCELiKLE EMEGE SAYGI LUTFEN...\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(3000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"BU PROGRAMLA iLGiLi GORUSLERiNiZ VE ONERiLERiNiZ\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(3000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"BENiM iCiN COK ONEMLi.VE SiZLERDENDE BU TARZ BASiT PROGRAMLAR VE OYUNLAR\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(3000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"YAPAN ARKADASLAR VARSA BANA EMAiL ADRESiMDEN ULASIRSANIZ SEViNiRiM.\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(3000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;""&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(3000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"SAYGILAR VE SEVGiLER HERKESE ( BY )\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(3000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"email adresim : ouzcpp@hotmail.com\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(3000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"email adresim : ouztek@hotmail.com\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(4000); &lt;br /&gt;&lt;br /&gt;system("cls"); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"Windows ( calc ) HESAP MAKiNESi PROGRAMINA YONLENDiRiLiYORSUNUZ...\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;cout&lt;&lt;""&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"Lutfen Bekleyiniz...\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(5000); &lt;br /&gt;&lt;br /&gt;system("calc"); &lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;// 8 - KOMUT AŞAMASI. &lt;br /&gt;&lt;br /&gt;else &lt;br /&gt;{ &lt;br /&gt;&lt;br /&gt;system("cls"); &lt;br /&gt;&lt;br /&gt;system("color 0a"); &lt;br /&gt;&lt;br /&gt;Sleep(5000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"\n\n\n\n\n\n\n\n\n\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                    !!! LUTFEN DOGRU BiR UYGULAMA GiRiNiZ !!!\n"&lt;&lt;endl;   &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                                  [1][2][3][4][5]"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(5000); &lt;br /&gt;&lt;br /&gt;system("cls"); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"                       !!! HATALI BiR UYGULAMA GiRDiNiZ !!!\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(4000); &lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"Windows ( calc ) HESAP MAKiNESi PROGRAMINA YONLENDiRiLiYORSUNUZ...\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;cout&lt;&lt;""&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;cout&lt;&lt;"Lutfen Bekleyiniz...\n"&lt;&lt;endl;&lt;br /&gt;&lt;br /&gt;Sleep(5000); &lt;br /&gt;&lt;br /&gt;system("calc"); &lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-8313182952771940622?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/8313182952771940622/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=8313182952771940622' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/8313182952771940622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/8313182952771940622'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2008/10/c-de-bir-program-kodu.html' title='c de bir program kodu '/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-6190516672662175660</id><published>2008-09-12T14:12:00.000-07:00</published><updated>2008-10-13T12:58:39.746-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eczane Programı'/><category scheme='http://www.blogger.com/atom/ns#' term='eczane prog'/><category scheme='http://www.blogger.com/atom/ns#' term='c de eczane programı'/><category scheme='http://www.blogger.com/atom/ns#' term='eczane program kodları'/><title type='text'>Eczane Programı</title><content type='html'>eczane işlerini görebilecek bir program&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include&lt;stdio.h&gt;&lt;br /&gt;#include&lt;stdlib.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;#include&lt;string.h&gt;&lt;br /&gt;&lt;br /&gt;typedef struct{&lt;br /&gt;char ilac_ad[20];&lt;br /&gt;char barkod[20];&lt;br /&gt;char ilac_firmasi[50];&lt;br /&gt;double ilac_tutari;&lt;br /&gt;double kdv;&lt;br /&gt;char ilac_turu[20];&lt;br /&gt;int ilac_adedi;&lt;br /&gt;} İlacT;&lt;br /&gt;&lt;br /&gt;typedef struct{&lt;br /&gt;char eleman_adi[20];&lt;br /&gt;char eleman_soyadi[20];&lt;br /&gt;char eleman_unvani[20];&lt;br /&gt;int eleman_yasi;&lt;br /&gt;char eleman_tel_no[20];&lt;br /&gt;char tc_kimlik[15];&lt;br /&gt;} ElemanT;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;typedef struct{&lt;br /&gt;char eczane_ismi[20];&lt;br /&gt;ElemanT sahib;&lt;br /&gt;} EczaneT;&lt;br /&gt;&lt;br /&gt;typedef struct{&lt;br /&gt;double gelir;&lt;br /&gt;double gider;&lt;br /&gt;double kâr;&lt;br /&gt;} ButceT;&lt;br /&gt;&lt;br /&gt;typedef struct{&lt;br /&gt;double brut_maas_mik;&lt;br /&gt;double sigorta_mik;&lt;br /&gt;double net_maas_mik;&lt;br /&gt;} MaasT;&lt;br /&gt;&lt;br /&gt;void eczane_bil_gir(EczaneT* eczane)&lt;br /&gt;{&lt;br /&gt;char bos[2];&lt;br /&gt;FILE *ptr;&lt;br /&gt;ptr=fopen("eczane_bil.txt","w");&lt;br /&gt;gets(bos);&lt;br /&gt;printf("Eczane ismini giriniz...\t");&lt;br /&gt;gets(eczane-&gt;eczane_ismi);&lt;br /&gt;&lt;br /&gt;fputs(eczane-&gt;eczane_ismi,ptr);&lt;br /&gt;fprintf(ptr,"\n");&lt;br /&gt;&lt;br /&gt;printf("Eczane sahibinin ismini giriniz...\t");&lt;br /&gt;gets(eczane-&gt;sahib.eleman_adi);&lt;br /&gt;&lt;br /&gt;printf("Soyadini giriniz...\t");&lt;br /&gt;gets(eczane-&gt;sahib.eleman_soyadi);&lt;br /&gt;&lt;br /&gt;fputs(eczane-&gt;sahib.eleman_adi,ptr);&lt;br /&gt;fprintf(ptr,"\n");&lt;br /&gt;fputs(eczane-&gt;sahib.eleman_soyadi,ptr);&lt;br /&gt;&lt;br /&gt;fclose(ptr);&lt;br /&gt;&lt;br /&gt;if(ptr!=NULL)&lt;br /&gt;{&lt;br /&gt;printf("Bilgiler basariyla yuklendi...\n");&lt;br /&gt;}&lt;br /&gt;else{printf("Bilgiler yuklenirken bir hata olustu...\nLutfen tekrar giris yapiniz...\n");}&lt;br /&gt;}&lt;br /&gt;int eleman_bil_gir(ElemanT* eleman)&lt;br /&gt;{&lt;br /&gt;int secim;&lt;br /&gt;FILE* ptr;&lt;br /&gt;FILE* tptr;&lt;br /&gt;char isim[20];&lt;br /&gt;char tc[16];&lt;br /&gt;char uzanti[6]=".txt";&lt;br /&gt;char bos[2];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;system("cls");&lt;br /&gt;&lt;br /&gt;printf("Elemanin tc kimlik no sunu giriniz...\n");&lt;br /&gt;scanf("%s", &amp;eleman-&gt;tc_kimlik);&lt;br /&gt;&lt;br /&gt;strcpy(tc,eleman-&gt;tc_kimlik);&lt;br /&gt;strcat(tc,uzanti);&lt;br /&gt;&lt;br /&gt;tptr=fopen(tc,"w");&lt;br /&gt;&lt;br /&gt;printf("Eleman adini giriniz...\t");&lt;br /&gt;gets(bos);&lt;br /&gt;&lt;br /&gt;gets(eleman-&gt;eleman_adi);&lt;br /&gt;&lt;br /&gt;strcpy(isim,eleman-&gt;eleman_adi);&lt;br /&gt;strcat(isim,uzanti);&lt;br /&gt;&lt;br /&gt;ptr=fopen(isim,"w");&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"Tc Kimlik:\t");&lt;br /&gt;fputs(eleman-&gt;tc_kimlik,ptr);&lt;br /&gt;fprintf(ptr,"\n");&lt;br /&gt;&lt;br /&gt;fprintf(tptr,"Tc Kimlik:\t");&lt;br /&gt;fputs(eleman-&gt;tc_kimlik,tptr);&lt;br /&gt;fprintf(tptr,"\n");&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"Ad:\t");&lt;br /&gt;fputs(eleman-&gt;eleman_adi,ptr);&lt;br /&gt;fprintf(ptr,"\n");&lt;br /&gt;&lt;br /&gt;fprintf(tptr,"Ad:\t");&lt;br /&gt;fputs(eleman-&gt;eleman_adi,tptr);&lt;br /&gt;fprintf(tptr,"\n");&lt;br /&gt;&lt;br /&gt;printf("Soyadini giriniz...\t");&lt;br /&gt;gets(eleman-&gt;eleman_soyadi);&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"Soyad:\t");&lt;br /&gt;fputs(eleman-&gt;eleman_soyadi,ptr);&lt;br /&gt;fprintf(ptr,"\n");&lt;br /&gt;&lt;br /&gt;fprintf(tptr,"Soyad:\t");&lt;br /&gt;fputs(eleman-&gt;eleman_soyadi,tptr);&lt;br /&gt;fprintf(tptr,"\n");&lt;br /&gt;&lt;br /&gt;printf("Unvanini giriniz...\t");&lt;br /&gt;gets(eleman-&gt;eleman_unvani);&lt;br /&gt;fprintf(ptr,"Unvani:\t");&lt;br /&gt;fputs(eleman-&gt;eleman_unvani,ptr);&lt;br /&gt;fprintf(ptr,"\n");&lt;br /&gt;&lt;br /&gt;fprintf(tptr,"Unvani:\t");&lt;br /&gt;fputs(eleman-&gt;eleman_unvani,tptr);&lt;br /&gt;fprintf(tptr,"\n");&lt;br /&gt;&lt;br /&gt;printf("Yasini giriniz...\t");&lt;br /&gt;scanf("%d", &amp;eleman-&gt;eleman_yasi);&lt;br /&gt;fprintf(ptr,"Yas:\t");&lt;br /&gt;fprintf(ptr,"%d\n",eleman-&gt;eleman_yasi);&lt;br /&gt;&lt;br /&gt;fprintf(tptr,"Yas:\t");&lt;br /&gt;fprintf(tptr,"%d\n",eleman-&gt;eleman_yasi);&lt;br /&gt;&lt;br /&gt;printf("Telefon No sunu giriniz...\t");&lt;br /&gt;scanf("%s",eleman-&gt;eleman_tel_no);&lt;br /&gt;fprintf(ptr,"Tel-no:\t");&lt;br /&gt;fputs(eleman-&gt;eleman_tel_no,ptr);&lt;br /&gt;&lt;br /&gt;fprintf(tptr,"Tel-no:\t");&lt;br /&gt;fputs(eleman-&gt;eleman_tel_no,tptr);&lt;br /&gt;&lt;br /&gt;fclose(ptr);fclose(tptr);&lt;br /&gt;if(ptr!=NULL){printf("Bilgileriniz basariyla yuklendi...\n");}else{printf("Bilgiler yuklenirken bir hata olustu lutfen tekrar deneyiniz...\n");}&lt;br /&gt;if(tptr!=NULL){printf("Bilgiler yuklenirken bir hata olustu lutfen tekrar deneyiniz...\n");}&lt;br /&gt;&lt;br /&gt;free(eleman);&lt;br /&gt;do{&lt;br /&gt;printf("\nYeni eleman eklemek icin (1) e basiniz\nYoksa herhangi bir tusa basiniz...\n");&lt;br /&gt;scanf("%d", &amp;secim);&lt;br /&gt;if(secim!=1)&lt;br /&gt;return 0;&lt;br /&gt;&lt;br /&gt;eleman=(ElemanT*)malloc(sizeof ElemanT);&lt;br /&gt;eleman_bil_gir(eleman);&lt;br /&gt;}while(secim==1);&lt;br /&gt;}&lt;br /&gt;void eleman_maas_bil_gir()&lt;br /&gt;{&lt;br /&gt;MaasT maas;&lt;br /&gt;char name[20];&lt;br /&gt;char ek[5]=".txt";&lt;br /&gt;char tc[16];&lt;br /&gt;printf("Maas bilgilerini girmek istediginiz elemanin adini giriniz...\n");&lt;br /&gt;scanf("%s", name);&lt;br /&gt;printf("Maas bilgilerini girmek istedigininz elemanin tc kimlik no sungu iriniz\n");&lt;br /&gt;scanf("%s",tc);&lt;br /&gt;strcat(tc,ek);&lt;br /&gt;strcat(name, ek);&lt;br /&gt;FILE* tptr;&lt;br /&gt;tptr=fopen(tc,"a");&lt;br /&gt;FILE* ptr;&lt;br /&gt;ptr=fopen(name,"a");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf("Brut maas miktarini giriniz: ");&lt;br /&gt;scanf("%lf", &amp;maas.brut_maas_mik);&lt;br /&gt;printf("Sigorta ucretini girini: ");&lt;br /&gt;scanf("%lf", &amp;maas.sigorta_mik);&lt;br /&gt;maas.net_maas_mik=(maas.brut_maas_mik)-maas.sigorta_mik;&lt;br /&gt;printf("Elemaninizin net maas miktari %.2lf YTL dir...\n", maas.net_maas_mik);&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"\nBrut maas tutari: %.2lf YTL", maas.brut_maas_mik);&lt;br /&gt;fprintf(ptr,"\nSigorta tutari: %.2lf YTL", maas.sigorta_mik);&lt;br /&gt;fprintf(ptr,"\nNet maas tutari: %.2lf YTL", maas.net_maas_mik);&lt;br /&gt;&lt;br /&gt;fprintf(tptr,"\nBrut maas tutari: %.2lf YTL", maas.brut_maas_mik);&lt;br /&gt;fprintf(tptr,"\nSigorta tutari: %.2lf YTL", maas.sigorta_mik);&lt;br /&gt;fprintf(tptr,"\nNet maas tutari: %.2lf YTL", maas.net_maas_mik);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;fclose(ptr);&lt;br /&gt;&lt;br /&gt;if(ptr!=NULL){printf("Isleminiz basariyla gerceklestirildi...\n");}&lt;br /&gt;else{printf("Isleminizde hata olustu kontrol edip tekrar deneyiniz...\n");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void ilac_bil_gir()&lt;br /&gt;{&lt;br /&gt;İlacT ilac;&lt;br /&gt;FILE* ptr;&lt;br /&gt;FILE* bptr;&lt;br /&gt;char uzanti[5]=".txt";&lt;br /&gt;char name[20];&lt;br /&gt;char barkod[20];&lt;br /&gt;&lt;br /&gt;char bos[2];&lt;br /&gt;system("cls");&lt;br /&gt;printf("Ilacin adini giriniz...\t");&lt;br /&gt;gets(bos);&lt;br /&gt;gets(ilac.ilac_ad);&lt;br /&gt;&lt;br /&gt;printf("Ilacin turunu giriniz...\t");&lt;br /&gt;gets(ilac.ilac_turu);&lt;br /&gt;&lt;br /&gt;printf("Ilacin ait oldugu firmanin adinin giriniz...\t");&lt;br /&gt;gets(ilac.ilac_firmasi);&lt;br /&gt;&lt;br /&gt;printf("Ilacin barkodunu giriniz...\t");&lt;br /&gt;gets(ilac.barkod);&lt;br /&gt;&lt;br /&gt;printf("Ilacın tutarini giriniz...\t");&lt;br /&gt;scanf("%lf", &amp;ilac.ilac_tutari);&lt;br /&gt;&lt;br /&gt;printf("Ilacin kdv sini giriniz...\t");&lt;br /&gt;scanf("%lf", &amp;ilac.kdv);&lt;br /&gt;&lt;br /&gt;printf("Ilactan kac adet bulundugunu giriniz...\t");&lt;br /&gt;scanf("%d", &amp;ilac.ilac_adedi);&lt;br /&gt;&lt;br /&gt;strcpy(name,ilac.ilac_ad);&lt;br /&gt;strcat(name,uzanti);&lt;br /&gt;&lt;br /&gt;strcpy(barkod,ilac.barkod);&lt;br /&gt;strcat(barkod, uzanti);&lt;br /&gt;&lt;br /&gt;ptr=fopen(name,"w");&lt;br /&gt;bptr=fopen(barkod,"w");&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"Ilacin Barkodu:\t");&lt;br /&gt;fputs(ilac.barkod,ptr);&lt;br /&gt;&lt;br /&gt;fprintf(bptr,"Ilacin Barkodu:\t");&lt;br /&gt;fputs(ilac.barkod,bptr);&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"\nIlacin Adi:\t");&lt;br /&gt;fputs(ilac.ilac_ad,ptr);&lt;br /&gt;&lt;br /&gt;fprintf(bptr,"\nIlacin Adi:\t");&lt;br /&gt;fputs(ilac.ilac_ad,bptr);&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"\nIlacin Firmasi:\t");&lt;br /&gt;fputs(ilac.ilac_firmasi,ptr);&lt;br /&gt;&lt;br /&gt;fprintf(bptr,"\nIlacin Firmasi:\t");&lt;br /&gt;fputs(ilac.ilac_firmasi,bptr);&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"\nIlacin turu:\t");&lt;br /&gt;fputs(ilac.ilac_turu,ptr);&lt;br /&gt;&lt;br /&gt;fprintf(bptr,"\nIlacin turu:\t");&lt;br /&gt;fputs(ilac.ilac_turu,bptr);&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"\nIlacin Adedi:\t");&lt;br /&gt;fprintf(ptr,"%d", ilac.ilac_adedi);&lt;br /&gt;&lt;br /&gt;fprintf(bptr,"\nIlacin Adedi:\t");&lt;br /&gt;fprintf(bptr,"%d", ilac.ilac_adedi);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"\nIlacin Tutari:\t");&lt;br /&gt;fprintf(ptr,"%.2lf YTL", ilac.ilac_tutari);&lt;br /&gt;&lt;br /&gt;fprintf(bptr,"\nIlacin Tutari:\t");&lt;br /&gt;fprintf(bptr,"%.2lf YTL", ilac.ilac_tutari);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;fprintf(ptr,"\nIlacin kdv tutari:\t");&lt;br /&gt;fprintf(ptr,"%.2lf YTL",ilac.kdv);&lt;br /&gt;&lt;br /&gt;fprintf(bptr,"\nIlacin kdv tutari:\t");&lt;br /&gt;fprintf(bptr,"%.2lf YTL",ilac.kdv);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;fclose(ptr);&lt;br /&gt;fclose(bptr);&lt;br /&gt;&lt;br /&gt;if(ptr!=NULL){printf("Ilac bilgileri basariyla yuklendi...\n");}else{printf("Ilac bilgileri yuklenirken hata olustu lutfen tekrar deneyiniz...\n");}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;void ilac_bil_sorgula()&lt;br /&gt;{&lt;br /&gt;FILE* ptr;&lt;br /&gt;char barkod[20];&lt;br /&gt;char bos[2];&lt;br /&gt;char uzanti[5]=".txt";&lt;br /&gt;char* alici;&lt;br /&gt;alici=(char*)malloc(50*sizeof(char));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf("Lutfen ilacin barkodunu giriniz...\t");&lt;br /&gt;&lt;br /&gt;gets(bos);&lt;br /&gt;gets(barkod);&lt;br /&gt;&lt;br /&gt;strcat(barkod, uzanti);&lt;br /&gt;&lt;br /&gt;ptr=fopen(barkod,"r");&lt;br /&gt;system("cls");&lt;br /&gt;while(!(feof(ptr)))&lt;br /&gt;{&lt;br /&gt;fgets(alici,50,ptr);&lt;br /&gt;&lt;br /&gt;puts(alici);&lt;br /&gt;}&lt;br /&gt;free(alici);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void ilac_sat()&lt;br /&gt;{&lt;br /&gt;char string[15];&lt;br /&gt;int basamak=0;&lt;br /&gt;FILE* ptr;&lt;br /&gt;int value;&lt;br /&gt;int sonuc;&lt;br /&gt;char barkod[20];&lt;br /&gt;char bos[2];&lt;br /&gt;char uzanti[5]=".txt";&lt;br /&gt;char* alici;&lt;br /&gt;char ek[20]="Ilacin Adedi: ";&lt;br /&gt;alici=(char*)malloc(60*sizeof(char));&lt;br /&gt;if(alici==NULL){printf("Hafiza tahsisi yapilamadi...\n");}&lt;br /&gt;int al;&lt;br /&gt;char null[20];&lt;br /&gt;&lt;br /&gt;system("cls");&lt;br /&gt;printf("Lutfen ilacin barkodunu giriniz...\t");&lt;br /&gt;&lt;br /&gt;gets(bos);&lt;br /&gt;gets(barkod);&lt;br /&gt;&lt;br /&gt;strcpy(null,barkod);&lt;br /&gt;strcat(barkod, uzanti);&lt;br /&gt;&lt;br /&gt;ptr=fopen(barkod,"r+");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf("Kac Adet bu ilactan satilacak:\t");&lt;br /&gt;scanf("%d", &amp;al);&lt;br /&gt;&lt;br /&gt;while(!(feof(ptr)))&lt;br /&gt;{&lt;br /&gt;static int sayac=3;&lt;br /&gt;fgets(alici,60,ptr);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;while(sayac==0)&lt;br /&gt;{&lt;br /&gt;static int say=2;&lt;br /&gt;&lt;br /&gt;if(say==0){&lt;br /&gt;fscanf(ptr,"%d", &amp;value);&lt;br /&gt;value=value-al;&lt;br /&gt;if(value&lt;0){&lt;br /&gt;printf("Hic ilac kalmamis,Lutfen ilac siparis ediniz...\n");break;}&lt;br /&gt;else{&lt;br /&gt;sonuc= value+ al;&lt;br /&gt;do{&lt;br /&gt;sonuc=sonuc/10;&lt;br /&gt;basamak++;}while(sonuc!=0);&lt;br /&gt;&lt;br /&gt;if(basamak&gt;1){&lt;br /&gt;fseek(ptr,-(basamak),1);&lt;br /&gt;fprintf(ptr,"%d", value);&lt;br /&gt;while(basamak!=0){&lt;br /&gt;fprintf(ptr," ");basamak--;}&lt;br /&gt;break;}&lt;br /&gt;else{&lt;br /&gt;fseek(ptr,-1,1);&lt;br /&gt;fprintf(ptr,"%d", value);break;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;if((say&gt;0)&amp;&amp;(say!=0))&lt;br /&gt;{&lt;br /&gt;fscanf(ptr,"%s",string);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;say--;&lt;br /&gt;}&lt;br /&gt;sayac--;&lt;br /&gt;if(sayac&lt;0)&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;printf("\nIlactan %d tane satilnistir...\n\n",al);&lt;br /&gt;printf("%s barkodlu ilactan %d tane kalmistir...\n", null, value);&lt;br /&gt;fclose(ptr);&lt;br /&gt;}&lt;br /&gt;void ilac_ekle()&lt;br /&gt;{&lt;br /&gt;char string[15];&lt;br /&gt;int basamak=0;&lt;br /&gt;int sayac;&lt;br /&gt;FILE* ptr;&lt;br /&gt;int value;&lt;br /&gt;char barkod[20];&lt;br /&gt;char bos[2];&lt;br /&gt;char uzanti[5]=".txt";&lt;br /&gt;char* alici;&lt;br /&gt;char ek[20]="Ilacin Adedi: ";&lt;br /&gt;alici=(char*)malloc(60*sizeof(char));&lt;br /&gt;if(alici==NULL){printf("Hafiza tahsisi yapilamadi...\n");}&lt;br /&gt;int al;&lt;br /&gt;char null[20]="\0";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;system("cls");&lt;br /&gt;printf("Lutfen ilacin barkodunu giriniz...\t");&lt;br /&gt;&lt;br /&gt;gets(bos);&lt;br /&gt;gets(barkod);&lt;br /&gt;strcpy(null,barkod);&lt;br /&gt;&lt;br /&gt;strcat(barkod, uzanti);&lt;br /&gt;&lt;br /&gt;ptr=fopen(barkod,"r+");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf("Kac Adet bu ilactan eklenecek:\t");&lt;br /&gt;scanf("%d", &amp;al);&lt;br /&gt;&lt;br /&gt;while(!(feof(ptr)))&lt;br /&gt;{&lt;br /&gt;static int sayac=3;&lt;br /&gt;fgets(alici,60,ptr);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;while(sayac==0)&lt;br /&gt;{&lt;br /&gt;static int say=2;&lt;br /&gt;&lt;br /&gt;if(say==0){&lt;br /&gt;fscanf(ptr,"%d", &amp;value);&lt;br /&gt;value=value+al;&lt;br /&gt;if(value&lt;0){&lt;br /&gt;printf("Hic ilac kalmamis,Lutfen ilac siparis ediniz...\n");break;}&lt;br /&gt;else{&lt;br /&gt;sayac= value-al;&lt;br /&gt;do{&lt;br /&gt;sayac=sayac/10;&lt;br /&gt;basamak++;}while(sayac!=0);&lt;br /&gt;&lt;br /&gt;fseek(ptr,-basamak,1);&lt;br /&gt;fprintf(ptr,"%d", value);break;&lt;br /&gt;while(basamak!=0)&lt;br /&gt;{&lt;br /&gt;fprintf(ptr," ");&lt;br /&gt;basamak--;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;if((say&gt;0)&amp;&amp;(say!=0))&lt;br /&gt;{&lt;br /&gt;fscanf(ptr,"%s",string);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;say--;&lt;br /&gt;}&lt;br /&gt;sayac--;&lt;br /&gt;if(sayac&lt;0)&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;if(value&gt;0){&lt;br /&gt;printf("\nIlactan %d tane eklenmistir...\n\n",al);&lt;br /&gt;&lt;br /&gt;printf("%s barkodlu ilactan %d tane vardir...\n", null, value);}&lt;br /&gt;fclose(ptr);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void eczane_bilancosu(ButceT);&lt;br /&gt;&lt;br /&gt;void menu1()&lt;br /&gt;{&lt;br /&gt;char* name;&lt;br /&gt;name=(char*)malloc(20*sizeof(char));&lt;br /&gt;FILE* ptr;&lt;br /&gt;ptr=fopen("eczane_bil.txt","r");&lt;br /&gt;fgets(name,20,ptr);&lt;br /&gt;printf("\t\t\t\t");&lt;br /&gt;puts(name);&lt;br /&gt;printf("\n");&lt;br /&gt;printf("\t\t\t\t\tHOSGELDINIZ\n\n");&lt;br /&gt;}&lt;br /&gt;void menu()&lt;br /&gt;{&lt;br /&gt;system("color d");&lt;br /&gt;printf("\t\tEczane Bilgileri girmek icin (1)\a\n");&lt;br /&gt;printf("\t\tEleman Bilgileri girmek icin (2)\a\n");&lt;br /&gt;printf("\t\tEleman Maas Bilgilerini girmek icin (3)\a\n");&lt;br /&gt;printf("\t\tEleman Bilgileri isimle sorgulamak icin (4)\a\n");&lt;br /&gt;printf("\t\tEleman Bilgilerinin tc kimlik no ile sorgulamak icin (5)\a\n");&lt;br /&gt;printf("\t\tIlac bilgilerini girmek icin (6)\a\n");&lt;br /&gt;printf("\t\tIlac bilgilerini sorgulamak icin (7)\a\n");&lt;br /&gt;printf("\t\tIlac Satisi icin (8)\a\n");&lt;br /&gt;printf("\t\tIlac eklemek icin (9)\a\n");&lt;br /&gt;printf("\t\tYeni islem (10)\a\n");&lt;br /&gt;printf("\t\tCikis icin (11)\a\n");&lt;br /&gt;}&lt;br /&gt;void eleman_bil_sorgula_tc()&lt;br /&gt;{&lt;br /&gt;char uzanti[5]=".txt";&lt;br /&gt;char tc[16];&lt;br /&gt;FILE* tptr;&lt;br /&gt;printf("Tc Kimlik No yu Giriniz:\t");&lt;br /&gt;scanf("%s", tc);&lt;br /&gt;strcat(tc,uzanti);&lt;br /&gt;tptr=fopen(tc,"r");&lt;br /&gt;if(tptr==NULL){printf("Boyle Bir kayit bulunmamaktadir...\n");}&lt;br /&gt;system("cls");&lt;br /&gt;char* Name;&lt;br /&gt;Name=(char*)malloc(40*sizeof(char));&lt;br /&gt;while(!(feof(tptr)))&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;fgets(Name,40,tptr);&lt;br /&gt;puts(Name);&lt;br /&gt;}&lt;br /&gt;fclose(tptr);&lt;br /&gt;printf("\nSorguladiginiz kisinin Bilgileri yukaridadir...\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void eleman_bil_sorgula()&lt;br /&gt;{&lt;br /&gt;char bos[2];&lt;br /&gt;FILE* ptr;&lt;br /&gt;printf("Bilgilerine ulasmak istediginiz elemanin ismini ilk harfi buyuk olacak bıcımde giriniz\n");&lt;br /&gt;char uzanti[5]=".txt";&lt;br /&gt;char name[20];&lt;br /&gt;char* Name;&lt;br /&gt;Name=(char*)malloc(40*sizeof(char));&lt;br /&gt;gets(bos);&lt;br /&gt;gets(name);&lt;br /&gt;strcat(name, uzanti);&lt;br /&gt;ptr=fopen(name,"r");&lt;br /&gt;if(ptr==NULL){printf("Boyle Bir kayit bulunmamaktadir...\n");}&lt;br /&gt;system("cls");&lt;br /&gt;&lt;br /&gt;while(!(feof(ptr)))&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;fgets(Name,40,ptr);&lt;br /&gt;puts(Name);&lt;br /&gt;}&lt;br /&gt;fclose(ptr);&lt;br /&gt;printf("\nSorguladiginiz kisinin Bilgileri yukaridadir...\n");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;menu1();&lt;br /&gt;&lt;br /&gt;menu();&lt;br /&gt;int secim;&lt;br /&gt;system("color 3");&lt;br /&gt;printf("Seciminizi giriniz... ");&lt;br /&gt;scanf("%d", &amp;secim);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ElemanT* eleman;&lt;br /&gt;eleman=(ElemanT*)malloc(sizeof ElemanT);&lt;br /&gt;EczaneT* eczane;&lt;br /&gt;eczane=(EczaneT*)malloc(sizeof EczaneT);&lt;br /&gt;if(secim==1){&lt;br /&gt;eczane_bil_gir(eczane);&lt;br /&gt;system("pause");&lt;br /&gt;system("cls");&lt;br /&gt;return main();}&lt;br /&gt;if(secim==2){&lt;br /&gt;eleman_bil_gir(eleman);system("pause");&lt;br /&gt;system("cls");&lt;br /&gt;return main();}&lt;br /&gt;if(secim==3){&lt;br /&gt;eleman_maas_bil_gir();system("pause");&lt;br /&gt;system("cls");&lt;br /&gt;return main();}&lt;br /&gt;if(secim==4){&lt;br /&gt;eleman_bil_sorgula();system("pause");&lt;br /&gt;system("cls");&lt;br /&gt;return main();}&lt;br /&gt;if(secim==5){&lt;br /&gt;eleman_bil_sorgula_tc();system("pause");&lt;br /&gt;system("cls");&lt;br /&gt;return main();}&lt;br /&gt;if(secim==6){&lt;br /&gt;ilac_bil_gir();system("pause");&lt;br /&gt;system("cls");&lt;br /&gt;return main();}&lt;br /&gt;if(secim==7){&lt;br /&gt;ilac_bil_sorgula();system("pause");&lt;br /&gt;system("cls");&lt;br /&gt;return main();}&lt;br /&gt;if(secim==8){&lt;br /&gt;ilac_sat();system("pause");&lt;br /&gt;system("cls");&lt;br /&gt;return main();}&lt;br /&gt;if(secim==9){&lt;br /&gt;ilac_ekle();system("pause");&lt;br /&gt;system("cls");&lt;br /&gt;return main();}&lt;br /&gt;if(secim==10){&lt;br /&gt;system("cls");return main();}&lt;br /&gt;if(secim==11)&lt;br /&gt;return 0;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;else{&lt;br /&gt;return 0;}&lt;br /&gt;return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-6190516672662175660?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/6190516672662175660/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=6190516672662175660' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/6190516672662175660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/6190516672662175660'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2008/09/eczane-program.html' title='Eczane Programı'/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-2390018146478339248</id><published>2008-07-20T14:42:00.000-07:00</published><updated>2008-10-13T12:58:39.746-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='word list'/><category scheme='http://www.blogger.com/atom/ns#' term='alfabe kodu'/><category scheme='http://www.blogger.com/atom/ns#' term='c kodları'/><category scheme='http://www.blogger.com/atom/ns#' term='Word Listesi kodu'/><title type='text'>Word Listesi kodu</title><content type='html'>#include&lt;stdio.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;int i,j,k,l;&lt;br /&gt;const char a[26]={'A','B','C','D','E','F','G','H','I','J','K','L', 'M','N','O','P','Q','R','S','T','U','V','W','X','Y ','Z'};&lt;br /&gt;FILE *dosya;&lt;br /&gt;dosya=fopen("Nedved.txt","w");&lt;br /&gt;for(i=0;i&lt;26;i++)&lt;br /&gt;for(j=0;j&lt;26;j++)&lt;br /&gt;for(k=0;k&lt;26;k++)&lt;br /&gt;for(l=0;l&lt;26;l++)&lt;br /&gt;fprintf(dosya,"%c%c%c%c\n",a[i],a[j],a[k],a[l]);&lt;br /&gt;fclose(dosya);&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-2390018146478339248?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/2390018146478339248/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=2390018146478339248' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/2390018146478339248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/2390018146478339248'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2008/07/word-listesi-kodu.html' title='Word Listesi kodu'/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-3067412854769297892</id><published>2008-02-12T12:43:00.001-08:00</published><updated>2008-10-13T12:58:39.746-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yılan oyunun kod c++'/><title type='text'>yılan oyunun kod c++  c-programlari</title><content type='html'>Yılan oyunu..&lt;br /&gt;&lt;br /&gt;Yılan oyunun hazır kodları &lt;br /&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;conio.h&gt;&lt;br /&gt;#include &lt;dos.h&gt;&lt;br /&gt;&lt;br /&gt;void acilisnotlari(void);&lt;br /&gt;void seviyebelirle(void);&lt;br /&gt;void duvarbelirle(void);&lt;br /&gt;void yilankoordinatbelirle(void);&lt;br /&gt;void yembelirle(void);&lt;br /&gt;&lt;br /&gt;void kuyruksildegeraktar(void);&lt;br /&gt;void hareketkontrol(void);&lt;br /&gt;void duvarcarpmakontrol(void);&lt;br /&gt;void kendinecarpmakontrol(void);&lt;br /&gt;void yemekontrol(void);&lt;br /&gt;void yilangoruntule(void);&lt;br /&gt;void ozelyembelirle(void);&lt;br /&gt;void yukari(void);&lt;br /&gt;void asagi(void);&lt;br /&gt;void saga(void);&lt;br /&gt;void sola(void);&lt;br /&gt;void sonnot(void);&lt;br /&gt;&lt;br /&gt;static int yilan[100][2],yem[2][2];&lt;br /&gt;static int x,y,dson,ozelpuan,verilecekpuan,yemX,yemY,puan,kon trol,yilankuyrukX,yilankuyrukY,kuyruk=6,seviye=110 ,baraj=25;&lt;br /&gt;int ch,d=77,i,j,sec;&lt;br /&gt;char ad[35]="030123003 - ™ZGšR BAYRAKTARO¦LU",olmadi;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void sonnot()&lt;br /&gt;{&lt;br /&gt;nosound();&lt;br /&gt;getch();&lt;br /&gt;clrscr();&lt;br /&gt;gotoxy(22,12);&lt;br /&gt;textcolor(RED);cprintf("@ ...DESIGNED BY ™ZGšR BAYRAKTARO¦LU... @");&lt;br /&gt;delay(1500);&lt;br /&gt;textcolor(7);&lt;br /&gt;exit(0);&lt;br /&gt;}&lt;br /&gt;void acilisnotlari(void)&lt;br /&gt;{&lt;br /&gt;_setcursortype(_NOCURSOR);&lt;br /&gt;textcolor(7);&lt;br /&gt;x=14,y=14;&lt;br /&gt;clrscr();&lt;br /&gt;gotoxy(20,7);printf("ntt---€anakkale 18 Mart šniversitesi");&lt;br /&gt;delay(500);&lt;br /&gt;gotoxy(20,8);printf ("ntt---Bilgisayar ™§retmenli§i ve ™§retim Teknolojileri B”l?m?");&lt;br /&gt;delay(500);&lt;br /&gt;gotoxy(20,9);printf ("ntt---Programlama Dersi");&lt;br /&gt;delay(500);&lt;br /&gt;gotoxy(20,10);printf ("ntt---Vize Projesi:");&lt;br /&gt;delay(500);&lt;br /&gt;gotoxy(33,11);printf (" Nokia Y?lan Oyunu...n");&lt;br /&gt;delay(500);&lt;br /&gt;gotoxy(20,6);&lt;br /&gt;textcolor(2);&lt;br /&gt;for (i=0; i&lt;31;i++)&lt;br /&gt;{&lt;br /&gt;cprintf("%c",ad[i]);&lt;br /&gt;sound(4000);&lt;br /&gt;delay(50);&lt;br /&gt;nosound();&lt;br /&gt;delay(70);&lt;br /&gt;}&lt;br /&gt;delay (500);&lt;br /&gt;textcolor(BLUE);&lt;br /&gt;for (y=14; y&gt;4; y -= 9)&lt;br /&gt;for (x=14;x&lt;76;x++)&lt;br /&gt;{&lt;br /&gt;gotoxy(x,y); cprintf("%c",2);&lt;br /&gt;delay(10);&lt;br /&gt;}&lt;br /&gt;for (x=14; x&lt;76; x += 61)&lt;br /&gt;for (y=6; y&lt;15; y++)&lt;br /&gt;{&lt;br /&gt;gotoxy(x,y); cprintf("%c",2);&lt;br /&gt;delay(15);&lt;br /&gt;}&lt;br /&gt;gotoxy(27,17);&lt;br /&gt;textcolor(4+128);&lt;br /&gt;cprintf("BaŸlamak icin herhangi bir tuŸa bas?n?z");&lt;br /&gt;getch();&lt;br /&gt;textcolor(7);&lt;br /&gt;clrscr();&lt;br /&gt;}&lt;br /&gt;void seviyebelirle()&lt;br /&gt;{&lt;br /&gt;if (puan &gt;= 150)&lt;br /&gt;seviye = 50;&lt;br /&gt;else if (puan&gt;=125)&lt;br /&gt;seviye = 60;&lt;br /&gt;else if (puan&gt;=100)&lt;br /&gt;seviye = 70;&lt;br /&gt;else if(puan&gt;=75)&lt;br /&gt;seviye = 80;&lt;br /&gt;else if (puan&gt;=50)&lt;br /&gt;seviye = 90;&lt;br /&gt;else if (puan&gt;= 25)&lt;br /&gt;seviye = 100;&lt;br /&gt;}&lt;br /&gt;void duvarbelirle()&lt;br /&gt;{&lt;br /&gt;textcolor(GREEN);&lt;br /&gt;for (j=1;j&lt;25;j=j+23)&lt;br /&gt;for (i=1;i&lt;=80;i++)&lt;br /&gt;{&lt;br /&gt;gotoxy (i,j);&lt;br /&gt;cprintf ("%c", 219);&lt;br /&gt;}&lt;br /&gt;for (i=1;i&lt;=80;i=i+79)&lt;br /&gt;for (j=1;j&lt;25;j++)&lt;br /&gt;{&lt;br /&gt;gotoxy(i,j);&lt;br /&gt;cprintf ("%c", 219);&lt;br /&gt;}&lt;br /&gt;textbackground(2);&lt;br /&gt;textcolor(0);&lt;br /&gt;gotoxy(61,24);&lt;br /&gt;cprintf("™zg?r Bayraktaro§lu");&lt;br /&gt;textbackground(0);&lt;br /&gt;textcolor(7);&lt;br /&gt;}&lt;br /&gt;void yilankoordinatbelirle()&lt;br /&gt;{&lt;br /&gt;randomize();&lt;br /&gt;yilan[0][0] = random(60)+8;&lt;br /&gt;yilan[0][1] = rand()%21+2;&lt;br /&gt;for (i=1; i&lt;7; i++)&lt;br /&gt;{&lt;br /&gt;gotoxy(yilan[i-1][0],yilan[i-1][1]);&lt;br /&gt;if (i==1)&lt;br /&gt;{&lt;br /&gt;printf("%c",2);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;printf("%c",219);&lt;br /&gt;}&lt;br /&gt;yilan[i][0] = yilan[0][0]-i;&lt;br /&gt;yilan[i][1] = yilan[0][1];&lt;br /&gt;}&lt;br /&gt;gotoxy(yilan[kuyruk][0],yilan[kuyruk][1]);printf("%c",219);&lt;br /&gt;}&lt;br /&gt;void yembelirle()&lt;br /&gt;{&lt;br /&gt;yem[0][0] = rand()%77 + 2;&lt;br /&gt;yem[0][1] = rand()%21 + 2;&lt;br /&gt;for (i=0; i&lt;=kuyruk; ++i)&lt;br /&gt;{&lt;br /&gt;if (yem[0][0] == yilan[i][0] &amp;&amp; yem[0][1] == yilan[i][1])&lt;br /&gt;yembelirle();&lt;br /&gt;}&lt;br /&gt;gotoxy(yem[0][0],yem[0][1]);&lt;br /&gt;printf("%c",2);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void kuyruksildegeraktar()&lt;br /&gt;{&lt;br /&gt;yilankuyrukX = yilan[kuyruk][0];&lt;br /&gt;yilankuyrukY = yilan[kuyruk][1];&lt;br /&gt;for (i=kuyruk; i&gt;=1; i--)&lt;br /&gt;{&lt;br /&gt;yilan[i][0] = yilan[i-1][0];&lt;br /&gt;yilan[i][1] = yilan[i-1][1];&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;void hareketkontrol()&lt;br /&gt;{&lt;br /&gt;switch (d)&lt;br /&gt;{&lt;br /&gt;case 72:yukari();break;//yukari&lt;br /&gt;case 80:asagi();break;//asagi&lt;br /&gt;case 77:saga();break;//saga&lt;br /&gt;case 75:sola();break;//sol&lt;br /&gt;//case 'p':break;//pause&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;void yukari()&lt;br /&gt;{&lt;br /&gt;if (dson == 80)&lt;br /&gt;{&lt;br /&gt;yilan[0][1]++;&lt;br /&gt;d=dson;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;yilan[0][1]--;&lt;br /&gt;}&lt;br /&gt;void asagi()&lt;br /&gt;{&lt;br /&gt;if (dson == 72)&lt;br /&gt;{&lt;br /&gt;yilan[0][1]--;&lt;br /&gt;d=dson;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;yilan[0][1]++;&lt;br /&gt;}&lt;br /&gt;void saga()&lt;br /&gt;{&lt;br /&gt;if (dson == 75)&lt;br /&gt;{&lt;br /&gt;yilan[0][0]--;&lt;br /&gt;d=dson;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;yilan[0][0]++;&lt;br /&gt;}&lt;br /&gt;void sola()&lt;br /&gt;{&lt;br /&gt;if (dson == 77)&lt;br /&gt;{&lt;br /&gt;yilan[0][0]++;&lt;br /&gt;d=dson;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;yilan[0][0]--;&lt;br /&gt;}&lt;br /&gt;void duvarcarpmakontrol()&lt;br /&gt;{&lt;br /&gt;if ( yilan[0][0] &gt; 79 || yilan[0][0] &lt; 2 || yilan[0][1] &gt;23 || yilan[0][1] &lt; 2 )&lt;br /&gt;{&lt;br /&gt;sound(850);&lt;br /&gt;gotoxy(30,25);printf(".......KENARA CARPTIN........");&lt;br /&gt;delay(1000);&lt;br /&gt;sonnot();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;void kendinecarpmakontrol()&lt;br /&gt;{&lt;br /&gt;for (i=2;i&lt;kuyruk;i++)&lt;br /&gt;{&lt;br /&gt;if (yilan[0][0] == yilan[i][0] &amp;&amp; yilan[0][1] == yilan[i][1])&lt;br /&gt;{&lt;br /&gt;sound(850);&lt;br /&gt;gotoxy(35,25);printf("KENDi KENDiNE CARPTIN");&lt;br /&gt;delay(1000);&lt;br /&gt;sonnot();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;void yemekontrol()&lt;br /&gt;{&lt;br /&gt;if (yem[0][0] == yilan[0][0] &amp;&amp; yem[0][1] == yilan[0][1])&lt;br /&gt;{&lt;br /&gt;sound(400);&lt;br /&gt;kuyruk++;&lt;br /&gt;yilan[kuyruk][0] = yilankuyrukX;&lt;br /&gt;yilan[kuyruk][1] = yilankuyrukY;&lt;br /&gt;puan += 5;&lt;br /&gt;gotoxy(1,25);&lt;br /&gt;printf("PUAN: %d KUYRUK BOYU: %d",puan+verilecekpuan,kuyruk);&lt;br /&gt;clreol();&lt;br /&gt;if (puan == baraj)&lt;br /&gt;{&lt;br /&gt;seviyebelirle();&lt;br /&gt;baraj += 25;&lt;br /&gt;gotoxy(1,25);&lt;br /&gt;printf("...OZEL YEM CIKTI CABUK YE...");&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;olmadi = 0;&lt;br /&gt;yem[1][0] = rand()%77 + 2;&lt;br /&gt;yem[1][1] = rand()%21 + 2;&lt;br /&gt;yemX = yem[1][0];&lt;br /&gt;yemY = yem[1][1];&lt;br /&gt;for (i=0; i&lt;=kuyruk; ++i)&lt;br /&gt;{&lt;br /&gt;if (yem[1][0] == yilan[i][0] &amp;&amp; yem[1][1] == yilan[i][1])&lt;br /&gt;olmadi = 1;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;while(olmadi == 1);&lt;br /&gt;&lt;br /&gt;gotoxy(yemX,yemY);&lt;br /&gt;textcolor(RED);&lt;br /&gt;cprintf("%c",3);&lt;br /&gt;kontrol = 1;&lt;br /&gt;verilecekpuan = 80;&lt;br /&gt;textcolor(7);&lt;br /&gt;}&lt;br /&gt;yembelirle();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void yilangoruntule()&lt;br /&gt;{&lt;br /&gt;for (i=0; i&lt;=kuyruk; ++i)&lt;br /&gt;{&lt;br /&gt;gotoxy(yilan[i][0],yilan[i][1]);&lt;br /&gt;if (i==0)&lt;br /&gt;{&lt;br /&gt;textcolor(4);&lt;br /&gt;cprintf("%c",2);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;textcolor(i);&lt;br /&gt;cprintf("%c",219);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;gotoxy(yilankuyrukX,yilankuyrukY);&lt;br /&gt;textcolor(7);&lt;br /&gt;cprintf(" ");&lt;br /&gt;delay(seviye);&lt;br /&gt;nosound();&lt;br /&gt;}&lt;br /&gt;void ozelyembelirle()&lt;br /&gt;{&lt;br /&gt;verilecekpuan -= 1;&lt;br /&gt;if (yemX == yilan[0][0] &amp;&amp; yemY == yilan[0][1])&lt;br /&gt;{&lt;br /&gt;sound(4000);&lt;br /&gt;kontrol = 0;&lt;br /&gt;gotoxy(1,25);&lt;br /&gt;printf("ALDIGIN OZEL PUAN: %d ",verilecekpuan);&lt;br /&gt;clreol();&lt;br /&gt;}&lt;br /&gt;if (verilecekpuan == 0)&lt;br /&gt;{&lt;br /&gt;kontrol = 0;&lt;br /&gt;gotoxy(yemX,yemY);&lt;br /&gt;textcolor(7);&lt;br /&gt;cprintf(" ");&lt;br /&gt;gotoxy(1,25);&lt;br /&gt;printf("OZEL YEMi ALAMADIN");&lt;br /&gt;clreol();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;clrscr();&lt;br /&gt;acilisnotlari();&lt;br /&gt;seviyebelirle();&lt;br /&gt;duvarbelirle();&lt;br /&gt;yilankoordinatbelirle();&lt;br /&gt;yembelirle();&lt;br /&gt;while (ch!=27)&lt;br /&gt;{&lt;br /&gt;dson = d;&lt;br /&gt;while (!kbhit())&lt;br /&gt;{&lt;br /&gt;if (kontrol==1)&lt;br /&gt;ozelyembelirle();&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;kuyruksildegeraktar();&lt;br /&gt;hareketkontrol();&lt;br /&gt;duvarcarpmakontrol();&lt;br /&gt;kendinecarpmakontrol();&lt;br /&gt;yemekontrol();&lt;br /&gt;yilangoruntule();&lt;br /&gt;}&lt;br /&gt;while(1 == 2);&lt;br /&gt;}&lt;br /&gt;ch=getch();&lt;br /&gt;if (ch==0) d=getch();&lt;br /&gt;if (ch=='p')&lt;br /&gt;getch();&lt;br /&gt;&lt;br /&gt;if (kontrol==1)&lt;br /&gt;ozelyembelirle();&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;kuyruksildegeraktar();&lt;br /&gt;hareketkontrol();&lt;br /&gt;duvarcarpmakontrol();&lt;br /&gt;kendinecarpmakontrol();&lt;br /&gt;yemekontrol();&lt;br /&gt;yilangoruntule();&lt;br /&gt;}&lt;br /&gt;while(1 == 2);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;sonnot();&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-3067412854769297892?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/3067412854769297892/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=3067412854769297892' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/3067412854769297892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/3067412854769297892'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2008/02/ylan-oyunun-kod-c-c-programlari.html' title='yılan oyunun kod c++  c-programlari'/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-5972719273687656074</id><published>2007-12-30T14:07:00.000-08:00</published><updated>2008-10-13T12:58:39.746-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c pointer'/><title type='text'>c programlama pointer</title><content type='html'>Bu yazıda eğer bilgisayar bölümünde değilseniz çoğunlukla okullarda göremeyeceğiniz ancak oldukça önem taşıyan bir konu olan pointerla aşınalık sağlayarak üzerinizdeki zor gibi görünen bu konudaki korkuyu atmaya çalışacağız.&lt;br /&gt;Öncelikle, kısaca bahsetmek gerekirse bir integer değişkenin hafızada integer değeri tutması gibi, ya da bir double değişkenin ondalıklı sayılar tutması gibi pointer da adres değeri tutan değişkendir. Yani içinde tuttuğu adres başka bir değişkenin adresine point eder diyebiliriz.İsterseniz bir örnek üzerinde açıklayalım.&lt;br /&gt;int *p;&lt;br /&gt; int i;&lt;br /&gt; int j=10;&lt;br /&gt;&lt;br /&gt; komutu ile bir integer değişkenin adresini tutan p isimli bir pointer ve de i ve j isminde iki integer tanımlayıp dahası j’nin değerini tanımlanır tanımlanmaz 10’a eşitlemiş olduk.&lt;br /&gt;Şimdi i=j; diyerek i’nin de 10 olmasını sağlayabildiğimiz gibi&lt;br /&gt;p=&amp;j; komutu ile p pointerının j değişkeninin adresini tutmasını sağlayabiliriz.&lt;br /&gt;Ancak dikkat etmemiz gereken nasıl i=j; derken i’nin karşısına yine bir integer değer geliyorsa aynı şekilde adres tutan p pointerının karşısına da j’nin adresi olan &amp;amp;j’nin geliyor olması. Yani &amp;amp;j demek, j’nin memorydeki(hafızadaki) adresi demek oluyor. Bir de bunu tersi olan * işareti var ki *p de bize p pointerının gösterdiği adresin içeriğini veriyor.&lt;br /&gt;Yani şu durumda cout&lt;&lt;*p; gibi bir satır ‘p pointerının gösterdiği adresin içinde ne varsa onu ekrana yaz’ demek olacağından 10 rakamını ekranda gösterecektir.&lt;br /&gt;Diyebiliriz ki C++’da array(dizi) olarak bildiğiniz şey, aslında pointer yapısına sahip. Yani arrayin sıfırıncı elemanına point eden bir pointer var elimizde ve tüm diğer elemanlar da hafızada sıfırıncı elemanın yanına öylece dizilmiş haldeler. İşte array dediğimiz şey de bu yapıdan başka bir şey değil.&lt;br /&gt;Örneğin;&lt;br /&gt;int x[2][3]; komutu bize nasıl 2’ye 3 lük bir matris tanımlama imkanı veriyorsa ve onun (i,j)’inci elemanına x[2][3]; şeklinde ulaşıyorsak, bu aslında şunu yazmaktan farklı bir şey değil;&lt;br /&gt;*(&amp;amp;x[0][0]+3i+j) burada &amp;amp;x[0][0] bize (0,0)ıncı elemanın adresini veriyor.&lt;br /&gt;Bunu sütun sayısı olan 3 ile çarpıp j ile topladığınızda da (i,j)nci elemana ulaşmış oluyorsunuz.&lt;br /&gt;Ufak ve şirin bir kısaltma olarak C++’da &amp;amp;x[0][0] yerine x kullanabiliyoruz.&lt;br /&gt;Yani demek oluyor ki;&lt;br /&gt;*(x+3i+j) ibaresi de (i,j)nci elemanı ifade etmemizi sağlıyor.&lt;br /&gt;Şu an x[i][j] gibi kolay bir ifadeyi pointerlar ile ifade edip niye kalabalık yaptığımıza bir anlam verememeniz doğal. Ancak emin olun ki bazı durumlarda arraylarle uğraşmaktansa direkt pointer aritmetiği kullanarak işimizi çok daha kolay halledebileceğimizi ilerde anlayacaksınız.&lt;br /&gt;Pointerlarin kullanıldığı en rahat anlaşılır ve etkin yerlereden biri dinamik hafıza kontrolüdür (dynamic memory management). Bir dahaki sefere uygulamalı olarak pointerların bize nasıl program ortasında değişken oluşturma ve yine istediğimiz anda ortadan kaldırma imkanı verdiğinden bahsedeceğiz. Bu defa sadece bilmeyenlerin pointerları kabaca tanımalarını ve varsa korkuyu üzerlerinden atmalarını amaçladım.&lt;br /&gt;ALINTI&lt;br /&gt;------------------&lt;br /&gt;Gece gece böyle bi konu bulduk.(nerden bulduysam, eh insan oyun programcısıyla konuşursa gece gece bile kodlarla uğraşır  )&lt;br /&gt;Bende daha şu saatlerde karşılaştım bu pointer denilen şeyle aslında C++ ile ilgilenmem ama yeri gelmişken öyle bir kişiden pointer konusunu dinlemek hoş bişi  Galiba bu kadar karıştırılan şeyi ben anladım (bide koda çevirebilsem tam olcak  )&lt;br /&gt;"int a = 5; //a değişkenini 5 yapttıkint* b = &amp;a; //b pointerına anın adresini atadık*b = 10; // bnin gösterdiği adrese 10 yazdık&lt;br /&gt;burdan sonra anın değeri ne olur?"&lt;br /&gt;ben: "5*10 mu ?"&lt;br /&gt;"hyr 10&lt;br /&gt;int* b // b nin integer pointer ı olduunu ifade ediyo02:42 &amp;amp;a daki &amp;amp; anın adresini alıyo*b de bnin gösterdiği adresteki değer demek oluyo"&lt;br /&gt;ben: "onu sil bunu yazmı diyo :S"&lt;br /&gt;"Evet =) bu 3 olayı kavrayabilirsen data yapılarını çok rahat anlarsın .aslında çizerek göstermem lazım daha iyi olur ama şimdi kağıt kalem yok =) "&lt;br /&gt;ben: "doğrudr bi an aklımda canlandırdım kutu kutu felan "&lt;br /&gt;"evet aynen öyle =)"&lt;br /&gt;ben: "kutuya Ayşe girerse erkekler onu çarpar dedim (5*10) baktım olmadı dedim Ali girer ayşe kaçar  "&lt;br /&gt;"hehehee pointer konusu c / c++ öğrenicilerinin en zorlandığı konudur bu yüzden genelde vb yada pascal gibi başka dillerle başlarlar ama sökersen bu konuyu gerisi çorap söküğü gibi gelir =). pointerın nasıl kullanabileceğini kavrayınca onu kullanarak yeni yapılar oluşturuyosun ağaçlar / yığıtlar falan =)""&lt;br /&gt;ben: "yığıt :S"&lt;br /&gt;"hmm şöyle düşün üstüste konmuş n tane tabak en tepeye tabak koyabiliyosun en tepeden tabak alabiliyosun.Tabaklarda da veri var"&lt;br /&gt;ben: "çörek börek"&lt;br /&gt;"evet =))"&lt;br /&gt;ben: "Peki bunlara resim aktarabiliyonmu ? Sadece yazımı yoksa Yoksa yoksa ..."&lt;br /&gt;"istediğini tut veri olarak.bak mesela şööle bi kullanımı var yığıtları "serkan" stringini ters çevirmek istiyoz mesela yığıyta sırayla "s" "e" "r" "k" "a" "n" ekliyosun. en tepedeki tabakta ne var şimdi? "&lt;br /&gt;ben: "N var"&lt;br /&gt;"üstüne E yi eklediküstüne R yi eklediküstüne K y eklediksoora sırayla alıyoz tabakları  "&lt;br /&gt;ben : "al gülüm ver gülüm  O masadan diğer masaya geçirdin.En üstteki en alta geldi.bide bunu koda çevirebilsem çok şey yapcamda "&lt;br /&gt;"hehehe"&lt;br /&gt;Böylece konuyu reel yaptıkmı konuların nası kolay anlaşılacağını göstermiş olduk&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-5972719273687656074?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/5972719273687656074/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=5972719273687656074' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/5972719273687656074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/5972719273687656074'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2007/12/pointer.html' title='c programlama pointer'/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-2594206638115605288</id><published>2007-12-08T09:58:00.001-08:00</published><updated>2008-10-13T12:58:39.747-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c FONKSİYONLAR'/><title type='text'>c FONKSİYONLAR</title><content type='html'>FONKSİYONLAR&lt;br /&gt;&lt;br /&gt;C'de alt programlara fonksiyon denir. Fonksiyon sözcüğü burada matematiksel anlamıyla değil diğer programlama dillerinde kullanılan, "alt program", "prosedür", "subroutine" sözcüklerinin karşılığı olarak kullanılmaktadır.&lt;br /&gt;&lt;br /&gt;Fonksiyonlar C dilinin temel yapı taşlarıdır. Çalıştırılabilen bir C programı en az bir C fonksiyonundan oluşur. Bir C programının oluşturulmasında fonksiyon sayısında bir kısıtlama yoktur.&lt;br /&gt;&lt;br /&gt;Fonksiyonların onları çağıran fonksiyonlardan aldıkları girdileri ve yine onları çağıran fonksiyonlara gönderdikleri çıktıları vardır. Fonksiyonların girdilerine aktüel parametreler (actual parameters) ya da argumanlar (arguments) diyoruz. Fonksiyonların çıktılarına geri dönüş değeri (return value) diyoruz.&lt;br /&gt;&lt;br /&gt;Bir fonksiyon iki farklı amaçla kullanılabilir :&lt;br /&gt;&lt;br /&gt;1. Fonksiyon, icrası süresince belli amaçları gerçekleştirir. (Belli işlemleri yapar)&lt;br /&gt;2. Fonksiyon icrası sonunda üreteceği bir değeri kendisini çağıran fonksiyona gönderebilir.&lt;br /&gt;Fonksiyonların Tanımlanması ve Çağırılması&lt;br /&gt;Bir fonksiyonun ne iş yapacağının ve bu işi nasıl yapacağının C dilinin sentaks kurallarına uygun olarak anlatılmasına o fonksiyonun tanımlanması (definition) denir. Fonksiyon tanımlamaları aşağıda inceleneceği gibi birtakım sentaks kurallarına tabidir.&lt;br /&gt;Bir fonksiyonun çağırılması ise o fonksiyonun yapacağı işi icraya davet edilmesi anlamına gelir. Fonksiyon çağırma ifadesi karşılığında derleyici, programın akışını ilgili fonksiyonun kodunun bulunduğu bölgeye aktaracak şekilde bir kod üretir. Programın akışı fonksiyonun kodu içinde akıp bu kodu bitirdiğinde, yani fonksiyon icra edildiğinde, programın akışı yine fonksiyonun çağırıldığı noktaya geri dönecektir. Fonksiyon çağırmaya ilişkin sentaks da yine aşağıda açıklanacaktır.&lt;br /&gt;Fonksiyonların Geri Dönüş Değerleri (return values)&lt;br /&gt;Bir fonksiyonun yürütülmesi sonunda onu çağıran fonksiyona dönüşünde gönderdiği değere, fonksiyonun geri dönüş değeri (return value) denmektedir. Her fonksiyon bir geri dönüş değeri üretmek zorunda değildir. Fonksiyonların geri dönüş değerleri farklı amaçlar için kullanılabilir;&lt;br /&gt;1. Bazı fonksiyonlar tek bir değer elde etmek amacıyla tasarlanmışlardır. Elde ettikleri değeri de kendilerini çağıran fonksiyonlara geri dönüş değeri olarak iletirler. Örneğin:&lt;br /&gt;&lt;br /&gt;y = pow(2, 3);&lt;br /&gt;&lt;br /&gt;pow fonksiyonu standart bir C fonksiyonudur. Birinci parametresiyle belirtilen sayının ikinci parametresiyle belirtilen kuvvetini hesaplayarak, hesapladığı sayıyı geri dönüş değeri olarak kendisini çağıran fonksiyona iletir. Yukarıdaki örnekte 2 sayısının 3. kuvveti bu fonksiyon yardımıyla hesaplanarak bulunan değer y değişkenine atanmıştır.&lt;br /&gt;&lt;br /&gt;2. Bazı fonksiyonların geri dönüş değerleri fonksiyonun yürütülmesi sırasında yapılan işlemlerin başarısı hakkında bilgi verir. Yani bu tür fonksiyonların geri dönüş değerleri test amacıyla kullanılmaktadır. Geri dönüş değerleri yapılması istenen işlemin başarılı olup olmaması durumunu açıklar. Örneğin :&lt;br /&gt;&lt;br /&gt;p = malloc(200);&lt;br /&gt;&lt;br /&gt;ifadesiyle bellekte 200 byte uzunluğunda bir blok tahsis etmek isteyen programcı bu işlemin başarılı bir biçimde yerine getirilip getirilmediğini de test etmek zorundadır. Hemen arkasından p değişkeninin aldığı değeri kontrol edecek ve işlemin başarısı hakkında bir karara varacaktır. Dolayısıyla malloc fonksiyonunun geri dönüş değeri, fonksiyonun yapması gereken işin başarılı bir şekilde sonuçlanıp sonuçlanmadığını göstermektedir.&lt;br /&gt;&lt;br /&gt;3. Bazı fonksiyonlar kendilerine gönderilen argumanları belirli bir kritere göre test ederler. Ürettikleri geri dönüş değerleri ise test sonucunu belirtir. Örneğin:&lt;br /&gt;&lt;br /&gt;if (isalpha(ch)) {&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Burada isalpha fonksiyonu arguman olarak gönderilen karakterin bir harf karakteri olup olmadığını test eder. Eğer harf karakteriyse, isalpha fonksiyonu 0 dışı bir değere geri dönecek, eğer harf karakteri değilse 0 değerine geri dönecektir. Çağıran fonksiyonda da geri dönüş değerine göre farklı işlemler yapılabilecektir.&lt;br /&gt;&lt;br /&gt;4. Bazı fonksiyonlar hem belli bir amacı gerçekleştirirler hem de buna ek olarak amaçlarını tamamlayan bir geri dönüş değeri üretirler. Örneğin :&lt;br /&gt;&lt;br /&gt;x = printf("Merhaba Dünya\n");&lt;br /&gt;&lt;br /&gt;Burada printf fonksiyonu ekrana Merhaba Dünya yazısını yazmak için kullanılmıştır. Ancak ekrana yazdığı karakter sayısını da geri dönüş değeri olarak vermektedir.&lt;br /&gt;Bir yazı içersinde bulunan belirli bir karakteri silecek bir fonksiyon tasarladığımızı düşünelim. Fonksiyon işini bitirdikten sonra yazıdan kaç karakter silmiş olduğunu geri dönüş değeri ile çağırıldığı yere bildirilebilir.&lt;br /&gt;&lt;br /&gt;5. Bazen geri dönüş değerlerine ihtiyaç duyulmaz. Örneğin yalnızca ekranı silme amacıyla tasarlanmış olan bir fonksiyonun geri dönüş değerine sahip olması gereksizdir.&lt;br /&gt;&lt;br /&gt;clrscr();&lt;br /&gt;&lt;br /&gt;clrscr fonksiyonu yalnızca ekranı siler, böyle bir fonksiyonun geri dönüş değerine ihtiyacı yoktur.&lt;br /&gt;&lt;br /&gt;Fonksiyonların geri dönüş değerlerinin de türleri söz konusudur. Fonksiyonların geri dönüş değerleri herhangi bir türden olabilir. Geri dönüş değerlerinin türleri fonksiyonların tanımlanması sırasında belirtilir.&lt;br /&gt;Fonksiyonların Tanımlanması&lt;br /&gt;Kendi yazdığımız fonksiyonlar için tanımlama (definition) terimini kullanıyoruz. C'de fonksiyon tanımlama işleminin genel biçimi şöyledir:&lt;br /&gt;&lt;br /&gt;[Geri dönüş değerinin türü] ([parametreler])&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Yukarıdaki gösterimde açısal parantez içinde belirtilen ifadeler zorunlu olarak bulunması gerekenleri köşeli parantez içinde belirtilen ifadeler ise bulunması zorunlu olmayan, isteğe bağlı (optional) ifadeleri göstermektedir. Tanımlanan fonksiyonlar en az bir blok içerirler. Bu bloğa fonksiyonun ana bloğu denir. Ana blok içinde istenildiği kadar içiçe blok yaratılabilir. Aşağıdaki fonksiyon tanımlamasından fonk1 fonksiyonunun parametre almadığını ve geri dönüş değerinin de double türden olduğunu anlıyoruz.&lt;br /&gt;&lt;br /&gt;double fonk1()&lt;br /&gt;{&lt;br /&gt;... &lt;br /&gt;... Fonksiyonun ana bloğu&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void Anahtar Sözcüğü&lt;br /&gt;Bir fonksiyonun parametre değişkeni ya da geri dönüş değeri olmak zorunda değildir. Bir fonksiyonun parametre değişkeni olmadığı iki şekilde belirtilebilir:&lt;br /&gt;&lt;br /&gt;1. Fonksiyon parametre parantezinin içi boş bırakılır, yani buraya hiçbirşey yazılmaz.&lt;br /&gt;2. Fonksiyon parametre parantezinin içine void anahtar sözcüğü yazılır.&lt;br /&gt;&lt;br /&gt;fonk() fonk(void) &lt;br /&gt;{ {&lt;br /&gt;... ...&lt;br /&gt;} }&lt;br /&gt;&lt;br /&gt;Yukarıdaki tanımlamalar C'de aynı anlama gelmiyor. Fonksiyon prototipleri konusunu öğrenirken bu iki tanımlama arasındaki farkı da öğrenmiş olacağız. Şimdilik bu iki tanımlamanın aynı anlama geldiğini ve fonksiyonun parametre almadığını belirttiklerini varsayacağız.&lt;br /&gt;&lt;br /&gt;Geri dönüş değerine ihtiyaç duyulmadığı durumlarda da geri dönüş değerinin türü yerine void anahtar sözcüğü yerleştirilir. Örneğin:&lt;br /&gt;&lt;br /&gt;void sample(void)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Yukarıda tanımlanan sample fonksiyonu parametre almamakta ve bir geri dönüş değeri de üretmemektedir.&lt;br /&gt;&lt;br /&gt;Fonksiyon tanımlarken geri dönüş değeri yazılmayabilir. Bu durum geri dönüş türünün olmadığı anlamına gelmez. Eğer geri dönüş değeri yazılmazsa, C derleyicileri tanımlanan fonksiyonun int türden bir geri dönüş değerine sahip olduğunu varsayarlar. Örneğin :&lt;br /&gt;&lt;br /&gt;sample2()&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Tanımlanan sample2 fonksiyonunun parametresi yoktur ama int türden bir geri dönüş değeri vardır.&lt;br /&gt;&lt;br /&gt;C dilinde fonksiyon içinde fonksiyon tanımlanamaz!&lt;br /&gt;&lt;br /&gt;Örneğin aşağıdaki durum error oluşturur, çünkü sample2 fonksiyonu sample1 fonksiyonunun içinde tanımlanmıştır:&lt;br /&gt;&lt;br /&gt;double sample1()&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;int sample2() /* error */&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;tanımlamanın aşağıdaki şekilde yapılması gerekirdi :&lt;br /&gt;&lt;br /&gt;double sample1()&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int sample2()&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;Fonksiyonların Çağırılması (function calls)&lt;br /&gt;C dilinde fonksiyon çağırma operatörü olarak () kullanılmaktadır. Bir fonksiyon çağırıldığı zaman programın akışı fonksiyonu icra etmek üzere bellekte fonksiyonun kodunun bulunduğu bölgeye atlar, fonksiyonun icra edilme işlemi bittikten sonra da akış tekrar çağıran fonksiyonun kalınan yerinden devam eder.&lt;br /&gt;&lt;br /&gt;Bir fonksiyonun geri dönüş değeri varsa, fonksiyon çağırma ifadesi geri dönüş değerini üretir.&lt;br /&gt;Geri dönüş değeri bir değişkene atanabileceği gibi doğrudan aritmetik işlemlerde de kullanılabilir. Örneğin:&lt;br /&gt;&lt;br /&gt;sonuc = hesapla();&lt;br /&gt;&lt;br /&gt;Burada hesapla fonksiyonunun çağırılma ifadesiyle üretilen geri dönüş değeri sonuc değişkenine atanmaktadır. Bir başka deyişle bir fonksiyon çağırma ifadesinin ürettiği değer, ilgili fonksiyonun ürettiği (eğer üretiyorsa) geri dönüş değeridir. Yukarıdaki örnekte önce hesapla() fonksiyonu çağırılacak daha sonra fonksiyonun icra edilmesiyle oluşan geri dönüş değeri sonuc değişkenine atanacaktır.&lt;br /&gt;&lt;br /&gt;Fonksiyonların geri dönüş değerleri nesne değildir yani sol taraf değeri (L value) değildir. Yani C dilinde aşağıdaki gibi bir atama her zaman hata verecektir:&lt;br /&gt;&lt;br /&gt;hesapla() = 5; /* hata (L value required) */&lt;br /&gt;&lt;br /&gt;Fonksiyonların geri dönüş değerleri sağ taraf değeri (R value) dir.&lt;br /&gt;&lt;br /&gt;sonuc = hesapla1() + hesapla2() + x + 10;&lt;br /&gt;&lt;br /&gt;gibi bir ifade geçerlidir. çağırılmış olan hesapla1 ve hesapla2 fonksiyonları icra edilerek üretilen geri dönüş değerleri ile x değişkeni içindeki değer ve 10 sabiti toplanacaktır. İfadeden elde edilen değer sonuç değişkenine atanacaktır.&lt;br /&gt;&lt;br /&gt;Fonksiyonlar ancak tanımlanmış fonskiyonların içerisinden çağırılabilirler. Blokların dışından fonksiyon çağırılamaz.&lt;br /&gt;&lt;br /&gt;Çağıran fonksiyon ile çağırılan fonksiyonun her ikisi de aynı amaç kod içerisinde bulunmak zorunda değildir. Çağıran fonksiyon ile çağırılan fonksiyon farklı amaç kodlar içerisinde de bulunabilir. Çünkü derleme işlemi sırasında bir fonksiyonun çağırıldığını gören derleyici, amaç kod içerisine (yani .obj içine) çağırılan fonksiyonun adını ve çağırılış biçimini yazmaktadır. Çağıran fonksiyon ile çağırılan fonksiyon arasında bağlantı kurma işlemi, bağlama aşamasında, bağlayıcı program (linker) tarafından yapılır.&lt;br /&gt;&lt;br /&gt;Bu nedenle tanımlanan bir fonksiyon içerisinde, var olmayan bir fonksiyon çağırılsa bile derleme aşamasında bir hata oluşmaz. Hata bağlama aşamasında oluşur. Çünkü bağlayıcı çağırılan fonksiyonu bulamayacaktır.&lt;br /&gt;&lt;br /&gt;Bütün C programları çalışmaya main fonksiyonundan başlar. Programın başladığı nokta olma dışında main fonksiyonunun diğer fonksiyonlardan başka hiçbir farkı yoktur. main fonksiyonun icrası bitince program da sonlanır. Bir C programının çalışabilmesi için mutlaka bir main fonksiyonuna sahip olması gerekir. Eğer main fonksiyonu yoksa hata bağlama (linking) aşamasında bağlayıcı program tarafından bildirilecektir.&lt;br /&gt;&lt;br /&gt;Standart C Fonksiyonları&lt;br /&gt;Standard C fonksiyonları, C dilinin standarlaştırılmasından sonra, her derleyicide bulunması zorunlu hale getirilmiş fonksiyonlardır. Yani derleyicileri yazanlar mutlaka standard C fonksiyonlarını kendi derleyicilerinde tanımlamak zorundadırlar. Bu durum C dilinin taşınabilirliğini (portability) artıran ana faktörlerden biridir.&lt;br /&gt;&lt;br /&gt;Bir fonksiyonun derleyiciyi yazanlar tarafından tanımlanmış ve derleyici paketine eklenmiş olması, o fonksiyonun standart C fonksiyonu olduğu anlamına gelmez. Derleyiciyi yazanlar programcının işini kolaylaştırmak için çok çeşitli fonksiyonları yazarak derleyici paketlerine eklerler. Ama bu tür fonksiyonların kullanılması durumunda, oluşturulan kaynak kodun başka bir derleyicide derlenebilmesi yönünde bir garanti yoktur, yani artık kaynak kodun taşınabilirliği azalır. Örneğin printf fonksiyonu standart bir C fonksiyonudur. Yani printf fonksiyonu her derleyici paketinde aynı isimle bulunmak zorundadır.&lt;br /&gt;&lt;br /&gt;Standart C fonksiyonları özel kütüphanelerin içerisinde bulunurlar. Başlık dosyaları içinde, yani uzantısı .h biçiminde olan dosyaların içinde standart C fonksiyonlarının prototipleri bulunmaktadır. Fonksiyon prototipleri konusu ileride detaylı olarak incelenecektir.&lt;br /&gt;&lt;br /&gt;Kütüphaneler (libraries) derlenmiş dosyalardan oluşur. DOS'da kütüphane dosyalarının uzantısı .lib, UNIX'de ise .a (archive) biçimindedir. WINDOWS altında uzantısı .dll biçiminde olan dinamik kütüphaneler de bulunmaktadır.&lt;br /&gt;&lt;br /&gt;Derleyicileri yazanlar tarafından kaynak kodu yazılmış standart C fonksiyonları önce derlenerek .obj haline getirilirler ve daha sonra aynı gruptaki diğer fonksiyonların .obj halleriyle birlikte kütüphane dosyalarının içine yerleştirilirler. Standart C fonksiyonları bağlama aşamasında, bağlayıcı (linker) tarafından çalışabilir (.exe) kod içerisine yazılırlar. Entegre çalışan derleyicilerde bağlayıcılar amaç kod içerisinde bulamadıkları fonksiyonları, yerleri önceden belirlenmiş kütüphaneler içinde ararlar. Oysa komut satırlı uyarlamalarında (command line version) bağlayıcıların hangi kütüphanelere bakacağı komut satırında belirtilir.&lt;br /&gt;&lt;br /&gt;Standart fonksiyonlarını kullanmak programların taşınabilirliğini artırdığı gibi proje geliştirme süresini de kısaltır. Bu yüzden iyi bir C programcısının C dilinin standart fonksiyonlarını çok iyi tanıması ve bu fonksiyonları yetkin bir şekilde kullanabilmesi gerekmektedir.&lt;br /&gt;Fonksiyonların Geri Dönüş Değerlerinin Oluşturulması&lt;br /&gt;C dilinde fonksiyonların geri dönüş değerleri return anahtar sözcüğü ile oluşturulur. return anahtar sözcüğünün bir başka işlevi de içinde bulunduğu fonksiyonu sonlandırmasıdır.&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;int sample(void)&lt;br /&gt;{&lt;br /&gt;int x = 10; int y = 20;&lt;br /&gt;&lt;br /&gt;return x * y;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;int c;&lt;br /&gt;&lt;br /&gt;c = sample();&lt;br /&gt;printf("c = %d\n", c);&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Yukarıdaki örnekteki sample fonksiyonunda return anahtar sözcüğünün yanında yer alan x * y ifadesi sample fonksiyonunu sonlandırmakta ve sample fonksiyonunun geri dönüş değerini oluşturmaktadır. Fonksiyonun geri dönüş değeri, main fonksiyonu içinde c değişkenine atanmış ve daha sonra standart C fonksiyonu olan printf ile c fonksiyonunun değeri ekrana yazdırılmıştır. fonksiyonun geri dönüş değerini başka bir değişkene atamadan aşağıdaki ifade ile de doğrudan ekrana yazdırabilirdik :&lt;br /&gt;&lt;br /&gt;printf("%d\n", sample());&lt;br /&gt;&lt;br /&gt;Aynı örnekte main fonksiyonu içinde de bir return ifadesinin yer aldığı görülmektedir. main de bir fonksiyondur ve main fonksiyonunun da bir geri dönüş değeri olabilir. main fonksiyonun geri dönüş değeri programın icrası bittikten sonra işletim sistemine bildirilmektedir. main fonksiyonunun başına bir geri dönüş değer türü yazılmazsa derleyiciler main fonksiyonunun geri dönüş değerinin int türden olduğunu varsayarlar. Özellikle yeni derleyiciler, tanımlamalarında bir geri dönüş değeri üretecekleri belirtilen fonksiyonlarının, return anahtar sözcüğüyle geri dönüş değeri üretmemelerini bir uyarı (warning) mesajı ile bildirirler. Borland derleyicilerinde bu uyarı mesajı genellikle "warning : function should return a value..." şeklindedir. Bu uyarı mesajını kesmek için iki yol vardır:&lt;br /&gt;&lt;br /&gt;1. main fonksiyonu da yukarıdaki örnekte olduğu gibi int türden bir geri dönüş değeri üretir. Geleneksel olarak bu değer 0 ise programın problemsiz bir şekilde sonlandırıldığı anlamına gelir.&lt;br /&gt;&lt;br /&gt;2. main fonksiyonunun başına void anahtar sözcüğü yazılarak bu fonksiyonun bir geri dönüş değeri üretmeyeceği derleyiciye bildirilir. Bu durumda derleyici geri dönüş değeri beklemediği için bir uyarı mesajı göndermez.&lt;br /&gt;&lt;br /&gt;return anahtar sözcüğünün kullanılması zorunlu değildir. Bir fonksiyon içinde return anahtar sözcüğü kullanılmamışsa fonksiyonun icrası, fonksiyonun ana bloğunun sonuna gelindiğinde otomatik olarak biter. Tabi bu tür bir fonksiyon anlamlı bir şekilde bir geri dönüş değeri üretemeyecektir. Bir geri dönüş değerine sahip olacak şekilde tanımlanmış fakat return ile geri dönüş değeri oluşturulmamış fonksiyonlar rastgele bir değer döndürürler.&lt;br /&gt;&lt;br /&gt;return anahtar sözcüğünden sonra parantez kullanılabilir ama parantez kullanımı zorunlu değildir. Okunabilirlik açısından özellikle uzun return ifadelerinde parantez kullanımı tavsiye edilmektedir.&lt;br /&gt;&lt;br /&gt;return (a * b - c * d);&lt;br /&gt;&lt;br /&gt;return 5; /* return ifadesinin değişken içermesi bir zorunluluk değildir. Bir fonksiyon sabit bir değerle de geri dönebilir. */&lt;br /&gt;&lt;br /&gt;return sample(); &lt;br /&gt;&lt;br /&gt;Bu örnekte return anahtar sözcüğünden sonra bir fonksiyon çağırma ifadesi yer almaktadır. Bu durumda önce çağırılan fonksiyon icra edilir, ve geri dönüş değeri elde edilir, daha sonra elde edilen geri dönüş değeri tanımlanması yapılan fonksiyonun da geri dönüş değeri yapılmaktadır.&lt;br /&gt;&lt;br /&gt;Geri dönüş değeri olmayan fonksiyonlarda return anahtar sözcüğü yanında bir ifade olmaksızın tek başına da kullanılabilir :&lt;br /&gt;&lt;br /&gt;return;&lt;br /&gt;&lt;br /&gt;Bu durumda return içinde yer aldığı fonksiyonu geri dönüş değerini oluşturmadan sonlandırır.&lt;br /&gt;&lt;br /&gt;C dilinde fonksiyonlar yalnızca bir geri dönüş değeri üretebilirler. Bu da fonksiyonların kendilerini çağıran fonksiyonlara ancak bir tane değeri geri gönderebilmeleri anlamına gelmektedir. Ancak, fonksiyonların birden fazla değeri ya da bilgiyi kendilerini çağıran fonksiyonlara iletmeleri gerekiyorsa, C dilinde bunu sağlayacak başka mekanizmalar vardır ve bu mekanizmalar ileride detaylı olarak incelenecektir.&lt;br /&gt;&lt;br /&gt;Fonksiyonların ürettiği geri dönüş değerlerinin kullanılması yönünde bir zorunluluk yoktur. Örneğin fonk() fonksiyonu int türden bir değeri geri dönen bir fonksiyon olsun:&lt;br /&gt;&lt;br /&gt;a = fonk();&lt;br /&gt;&lt;br /&gt;yukarıdaki ifadese fonk fonksiyonunun geri dönüş değeri a değişkenine atanmaktadır. Dolayısıyla biz bu fonksiyonu bir kez çağırmamıza karşın artık geri dönüş değerini a değişkeninede tuttuğumuz için, bu geri dönüş değerine fonksiyonu tekrar çağırmadan istediğimiz zaman ulaşabiliriz. Ancak:&lt;br /&gt;&lt;br /&gt;fonk();&lt;br /&gt;&lt;br /&gt;şeklinde bir fonksiyon çağırma ifadesinde artık geri dönüş değeri bir değişkende saklanmamakatdır. Bu duruma geri dönüş değerinin kullanılmaması denir. (discarded return value).&lt;br /&gt;Örneğin standart bir C fonksiyonu olan printf fonksiyonun da bir geri dönüş değeri vardır (printf fonksiyonu ekrana bastırılan toplam karakter sayısına geri döner) ama bu geri dönüş değeri nadiren kullanılır.&lt;br /&gt;&lt;br /&gt;Fonksiyon Parametre Değişkenlerinin Tanımlanması&lt;br /&gt;Bir fonksiyonun parametreleri ya da parametre değişkenleri fonksiyonların kendilerini çağıran fonksiyonlardan aldıkları girdileri tutan değişkenleridir. Bir fonksiyonun parametre sayısı ve bu parametrelerin türleri gibi bilgiler, fonksiyonların tanımlanması sıarsında derleyicilere bildirilirler.&lt;br /&gt;&lt;br /&gt;C dilinde fonksiyonların tanımlanmasında kullanılan 2 temel biçim vardır. Bu biçimler birbirlerinden fonksiyon parametrelerinin derleyicilere tanıtılma şekli ile ayrılırlar. Bu biçimlerden birincisi eski biçim (old style) ikincisi ise yeni biçim (new style) olarak adlandırılır.&lt;br /&gt;&lt;br /&gt;Artık eski biçim hemen hemen hiç kullanılmamaktadır, ama C standartlarına göre halen geçerliliğini korumaktadır. Kullanılması tavsiye edilen kesinlikle yeni biçimdir ancak eski kodların ya da eski kaynak kitapların incelenmesi durumunda bunların anlaşılabilmesi için eski biçimin de öğrenilmesi gerekmektedir.&lt;br /&gt;&lt;br /&gt;Eski Biçim (old style)&lt;br /&gt;Bu biçimde fonksiyonun parametre değişkenlerinin yalnızca ismi fonksiyon parantezleri içinde yazılır. (Eğer parametre değişkenleri birden fazla ise aralarına virgül koyulur. Daha sonra alt satıra geçilerek bu değişkenlerin bildirimi yapılır. Bu bildirimler daha önce öğrendiğimiz, C dilinin bildirim kurallarına uygun olarak yapılır. Örnek :&lt;br /&gt;&lt;br /&gt;double alan(x, y)&lt;br /&gt;int x, y;&lt;br /&gt;{ &lt;br /&gt;return x * y;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Yukarıda tanımlanan alan fonksiyonunun iki parametre değişkeni vardır ve bu parametre değişkenlerinin isimleri x ve y'dir. Her iki parametre değişkeni de int türdendir.&lt;br /&gt;&lt;br /&gt;int sample (a, b, c)&lt;br /&gt;int a;&lt;br /&gt;double b;&lt;br /&gt;long c;&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Bu örnekte ise sample fonksiyonu üç parametre almaktadır. Parametre değişkenlerinin isimleri a, b ve c'dir. İsmi a olan parametre değişkeni int türden, b olanı double türden ve ismi c olanı ise long türdendir.&lt;br /&gt;&lt;br /&gt;Eski biçimin dezavantajı gereksiz yere uzun oluşudur. Çünkü fonksiyon parantezelerinin içinde parametre değişkenlerinin isimi yer almakta sonra tekrar bu isimler alt satırlarda yeniden kullanılarak bildirim yapılmaktadır.&lt;br /&gt;&lt;br /&gt;Yeni Biçim (new style)&lt;br /&gt;Yeni biçim eski biçime göre hem daha kısadır hem de okunabilmesi eski biçime göre çok daha kolaydır.&lt;br /&gt;&lt;br /&gt;Yeni biçimde fonksiyon parametre değişkenlerinin bildirimi fonksiyon parantezelerinin içinde yalnızca bir kez yapılmaktadır. Bu biçimde fonksiyonun parantezlerinin içine parametre değişkenin türü ve yanına da ismi yazılır. Eğer birden fazla fonksiyon parametre değişkeni varsa bunlar virgüllerle ayrılır ancak her defasında tür bilgisi yeniden yazılır . Örnek :&lt;br /&gt;&lt;br /&gt;int sample (int x, int y)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int fonk(double x, int y)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Bu biçimde dikkat edilmesi gereken önemli nokta, fonksiyon parametre değişkenleri aynı türden olsalar bile her defasında tür bilgisinin tekrar yazılması zorunluluğudur. Örneğin :&lt;br /&gt;&lt;br /&gt;int sample (double x, y) /* error */&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;bildirimi hatalıdır. Doğru tanımlamanın aşağıdaki şekilde olması gerekir:&lt;br /&gt;&lt;br /&gt;int sample (double x, double y)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Klavyeden Karakter Alan C Fonskiyonları&lt;br /&gt;Sistemlerin hemen hemen hepsinde klavyeden karakter alan 3 ayrı C fonksiyonu bulunur. Bu fonksiyonların biri tam olarak standarttır ama diğer ikisi sistemlerin hemen hemen hepsinde bulunmasına karşın tam olarak standart değildir.&lt;br /&gt;&lt;br /&gt;getchar Fonksiyonu&lt;br /&gt;int getchar(void);&lt;br /&gt;&lt;br /&gt;getchar standart bir C fonksiyonudur. Geri dönüş değeri klavyeden alınan karakterin ASCII tablosundaki sıra numarasını gösteren int türden bir sayıdır. getchar fonskiyonu klavyeden karakter almak için enter tuşuna ihtiyaç duyar.&lt;br /&gt;&lt;br /&gt;Aşağıda yazılan programda önce klavyeden bir karakter alınmış daha sonra alınan karakter ve karakterin sayısal karşılıkları ekrana yazdırılmıştır. (getchar fonksiyonunun geri dönüş değeri klavyede basılan tuşa ilişkin karakterin sistemde kullanılan karakter seti tablosundaki sıra numarasıdır.)&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;char ch;&lt;br /&gt;&lt;br /&gt;ch = getchar();&lt;br /&gt;printf("\nKarakter olarak ch = %c\nASCII numarası ch = %d\n", ch, ch);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;getchar derleyicilerin çoğunda stdio.h dosyasında bir makro olarak tanımlanmıştır. Makrolar konusunu daha ileride inceleyeceğiz.&lt;br /&gt;getch Fonksiyonu&lt;br /&gt;int getch(void);&lt;br /&gt;&lt;br /&gt;getchar fonksiyonu gibi bu fonksiyonda klavyede basılan tuşun kullanılan karakter setindeki sıra numarasıyla geri döner. getchar fonksiyonundan iki farkı vardır.&lt;br /&gt;1. Basılan tuş ekranda görünmez.&lt;br /&gt;2. Enter tuşuna ihtiyaç duymaz.&lt;br /&gt;&lt;br /&gt;Yukarıda verilen programda getchar yerine getch yazarak programı çalıştırırsanız farkı daha iyi görebilirsiniz.&lt;br /&gt;&lt;br /&gt;Tam olarak standardize edilmemiştir ama neredeyse bütün sistemlerde bulunur. getch fonksiyonu özellikle tuş bekleme ya da onaylama amacıyla kullanılmaktadır:&lt;br /&gt;&lt;br /&gt;....&lt;br /&gt;printf("devam için herhangi bir tuşa basınız...\n");&lt;br /&gt;getch();&lt;br /&gt;&lt;br /&gt;Burada basılacak tuşun programcı açısından bir önemi olmadığı için fonksiyonun geri dönüş değeri kullanılmamıştır.&lt;br /&gt;&lt;br /&gt;getche Fonksiyonu&lt;br /&gt;int getche(void);&lt;br /&gt;&lt;br /&gt;getche İngilizce get char echo sözcüklerinden gelmektedir. getche fonksiyonu da basılan tuşun karakter setindeki sıra numarasıyla geri döner ve enter tuşuna gereksinim duymaz. Ama basılan tuşa ilişkin karakter ekranda görünür.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;getchar&lt;br /&gt;enter tuşuna ihtiyaç duyar&lt;br /&gt;alınan karakter ekranda görünür.&lt;br /&gt;getch&lt;br /&gt;enter tuşuna ihtiyaç duymaz&lt;br /&gt;alınan karakter ekranda görünmez&lt;br /&gt;getche&lt;br /&gt;enter tuşuna ihtiyaç duymaz&lt;br /&gt;alınan karakter ekranda görünür.&lt;br /&gt;&lt;br /&gt;Ekrana Bir Karakterin Görüntüsünü Yazan C Fonksiyonları&lt;br /&gt;C dilinde ekrana karakter yazamakta iki fonksiyonun kullanıldığı görülür :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;putchar Fonksiyonu&lt;br /&gt;int putchar(int ch);&lt;br /&gt;&lt;br /&gt;putchar standart bir C fonksiyonudur. Bütün sistemlerde bulunması zorunludur. Parametresi olan karakteri ekranda imlecin bulunduğu yere yazar. Örneğin:&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;char ch;&lt;br /&gt;&lt;br /&gt;ch = getchar();&lt;br /&gt;putchar (ch);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Burada putchar fonksiyonunun yaptığı işi printf fonksiyonuna da yaptırabilirdik;&lt;br /&gt;&lt;br /&gt;printf("%c", ch);&lt;br /&gt;&lt;br /&gt;putchar(ch) ile tamamen aynı işleve sahiptir.&lt;br /&gt;&lt;br /&gt;putchar fonksiyonu ile '\n' karakterini yazdırdığımızda printf fonksiyonunda olduğu gibi imleç sonraki satırın başına geçer. putchar fonksiyonu ekrana yazılan karakterin ASCII karşılığı ile geri dönmektedir.&lt;br /&gt;&lt;br /&gt;putchar fonksiyonu derleyicilerin çoğunda stdio.h dosyası içinde bir makro olarak tanımlanmıştır. Makrolar konusunu ileriki derslerde detaylı olarak öğreneceğiz.&lt;br /&gt;&lt;br /&gt;putch Fonksiyonu&lt;br /&gt;int putch(int ch);&lt;br /&gt;&lt;br /&gt;putch standart bir C fonksiyonu değildir. Dolayısıyla sistemlerin hepsinde bulunmayabilir. Bu fonksiyonun putchar fonksiyonundan tek farkı '\n' karakterinin yazdırılması sırasında ortaya çıkar. putch, '\n" karakterine karşılık yalnızca LF(line feed) (ASCII 10) karakterini yazmaktadır. Bu durum imlecin bulunduğu kolonu değiştirmeksizin aşağı satıra geçmesine yol açar.&lt;br /&gt;&lt;br /&gt;printf Fonksiyonu&lt;br /&gt;&lt;br /&gt;Değişkenlerin içerisindeki değerler aslında bellekte ikilik sistemde tutulmaktadır. Bir değişkenin içerisindeki değerin ekrana, kaçlık sistemde ve nasıl yazdırılacağı programcının isteğine bağlıdır. Değişkenlerin içerisindeki değerlerin ekrana yazdırılmasında printf fonksiyonu kullanılır. printf standart bir C fonksiyonudur.&lt;br /&gt;&lt;br /&gt;printf aslında çok ayrıntılı özelliklere sahip bir fonksiyondur. Burada yalnızca temel özellikleri görsel bir biçimde açıklanacaktır. printf iki tırnak içerisindeki karakterleri ekrana yazar. Ancak iki tırnak içinde gördüğü % karakterlerini ekrana yazmaz. printf fonksiyonu % karakterlerini yanındaki karakter ile birlikte format karakteri olarak yorumlar. Format karakterleri iki tırnaktan sonra yazılan parametrelerle birebir eşleştirilir. Örnek:&lt;br /&gt;&lt;br /&gt;int x, y;&lt;br /&gt;&lt;br /&gt;x = 125;&lt;br /&gt;y = 200;&lt;br /&gt;printf("x = %d\ny = %d\n", x, y);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf fonksiyonunun yukarıdaki şekilde çağırılmasıyla x ve y değişkeni içindeki değerler ekrana onluk sistemde yazdırılacaktır.&lt;br /&gt;&lt;br /&gt;Format karakterleri yerine eşlenen değişkenlerin içerisindeki değerler ekrana yazılır. Format karakterleri sayıların ekrana nasıl yazılacağını belirtmekte kullanılır.&lt;br /&gt;&lt;br /&gt;format karakteri&lt;br /&gt;Anlamı&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;%d&lt;br /&gt;int türünü desimal sistemde yazar.&lt;br /&gt;%ld&lt;br /&gt;long türünü desimal sistemde yazar&lt;br /&gt;%x&lt;br /&gt;unsigned int türünü hexadecimal sistemde yazar.&lt;br /&gt;%X&lt;br /&gt;unsigned int türünü hexadecimal sistemde yazar.(semboller büyük harfle)&lt;br /&gt;%lx&lt;br /&gt;unsigned long türünü hexadecimal sistemde yazar.&lt;br /&gt;%u&lt;br /&gt;unsigned int türünü decimal sistemde yazar.&lt;br /&gt;%o&lt;br /&gt;unsigned int türünü oktal sistemde yazar.&lt;br /&gt;%f&lt;br /&gt;float ve double türlerini desimal sistemde yazar.&lt;br /&gt;%lf&lt;br /&gt;double türünü desimal sistemde yazar.&lt;br /&gt;%e&lt;br /&gt;gerçek sayıları üstel biçimde yazar.&lt;br /&gt;%c&lt;br /&gt;char veya int türünü karakter görüntüsü olarak yazdırır.&lt;br /&gt;%s&lt;br /&gt;string olarak yazdırır.&lt;br /&gt;%lf&lt;br /&gt;long double türünü desimal sistemde yazdırır.&lt;br /&gt;&lt;br /&gt;Yukarıdaki tabloda görüldüğü gibi double türü hem %f format karakteri hem de %lf format karakteri ile yazdırılabilmektedir. Ama %lf (okunabiliriliği artırdığı için) daha çok tercih edilmektedir.&lt;br /&gt;&lt;br /&gt;Yukarıdaki tabloya göre unsigned int türünden bir sayıyı aşağıdaki şekillerde yazdırabiliriz :&lt;br /&gt;&lt;br /&gt;unsigned int u;&lt;br /&gt;&lt;br /&gt;printf("%u", u); /* u sayısını 10'luk sistemde yazar */&lt;br /&gt;printf("%o, u); /* u sayısını 8'lik sistemde yazar */&lt;br /&gt;printf("%x, u); /* u sayısını 16'lık sistemde yazar */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;short bir sayıyı yazarken d o u ya da x karakterlerinden önce h karakterini kullanıyoruz :&lt;br /&gt;&lt;br /&gt;short int sh;&lt;br /&gt;&lt;br /&gt;printf("%hd", sh); /* 10'luk sistemde yazar */&lt;br /&gt;&lt;br /&gt;unsigned short int unsh;&lt;br /&gt;&lt;br /&gt;printf("%hu", unsh); /* 10'luk sistemde yazar */&lt;br /&gt;printf("%ho", unsh); /* 8'lik sistemde yazar */&lt;br /&gt;printf("%hx", unsh); /* 16'lık sistemde yazar */&lt;br /&gt;&lt;br /&gt;long bir sayıyı yazarken d o u ya da x karakterlerinden önce l karakterini kullanıyoruz :&lt;br /&gt;&lt;br /&gt;long int lo;&lt;br /&gt;&lt;br /&gt;printf("%ld", lo); /* 10'luk sistemde yazar */&lt;br /&gt;&lt;br /&gt;unsigned long int unlo;&lt;br /&gt;&lt;br /&gt;printf("%lu", unlo); /* 10'luk sistemde yazar */&lt;br /&gt;printf("%lo", unlo); /* 8'lik sistemde yazar */&lt;br /&gt;printf("%lx", unlo); /* 16'lık sistemde yazar */&lt;br /&gt;&lt;br /&gt;Yukarıdaki bilgilerde unsigned bir tamsayıyı printf fonksiyonuyla 8'lik ya da 16'lık sistemde yazdırabileceğimizi gördük. Peki signed bir tamsayıyı 8'lik ya da 16'lık sistemde yazdıramaz mıyız? Yazdırırsak ne olur? Sözkonusu signed tamsayı pozitif olduğu sürece bir sorun olmaz. Sayının işaret biri 0 olduğu için sayının nicel büyüklüğünü etkilemez. Yani doğru sayı ekrana yazar, ama sayı negatifse işaret biti 1 demektir. Bu durumda ekrana yazılacak sayının işaret biti de nicel büyüklüğün bir parçası olarak değerlendirilerek yazılır. Yani yazılan değer doğru olmayacaktır.&lt;br /&gt;&lt;br /&gt;% karakterinin yanında önceden belirlenmiş bir format karakteri yoksa , % karakterinin yanındaki karakter ekrana yazılır.&lt;br /&gt;&lt;br /&gt;%% (%) karakterini yaz anlamına gelir.&lt;br /&gt;&lt;br /&gt;scanf Fonksiyonu&lt;br /&gt;scanf fonksiyonu klavyeden her türlü bilginin girişine olanak tanıyan standart bir C fonksiyonudur. scanf fonksiyonu da printf fonksiyonu gibi aslında çok detaylı, geniş kullanım özellikleri olan bir fonksiyondur. Ancak biz bu noktada scanf fonksiyonunu yüzeysel bir şekilde tanıyacağız.&lt;br /&gt;&lt;br /&gt;scanf fonksiyonunun da birinci parametresi bir stringdir. Ancak bu string klavyeden alınacak bilgilere ilişkin format karakterlerini içerir. Bu format karakterleri önceden belirlenmiştir ve % karakterinin yanında yer alırlar. scanf fonksiyonunun kullandığı format karakterlerinin printf fonksiyonunda kullanılanlar ile aynı olduğunu söyleyebiliriz. Yalnızca gerçek sayılara ilişkin format karakterlerinde önemli bir farklılık vardır. printf fonksiyonu %f formatı ile hem float hem de double türden verileri ekrana yazabilirken scanf fonksiyonu %f format karakterini yalnızca float türden veriler için kullanır. double tür için scanf fonksiyonunun kullandığı format karakterleri %lf şeklindedir. scanf fonksiyonunun format kısmında format karakterlerinden başka bir şey olmamalıdır. printf fonksiyonu çift tırnak içindeki format karakterleri dışındaki karakterleri ekrana yazıyordu, ancak scanf fonksiyonu format karakterleri dışında string içine yazılan karakterleri ekrana basmaz, bu karakterler tamamen başka anlama gelecektir. Bu nedenle fonksiyonun nasıl çalıştığını öğrenmeden bu bölgeye format karakterlerinden başka bir şey koymayınız. Buraya konulacak bir boşluk bile farklı anlama gelmektedir.&lt;br /&gt;&lt;br /&gt;int x, y;&lt;br /&gt;&lt;br /&gt;scanf(“%d%d”, &amp;x, &amp;y);&lt;br /&gt;&lt;br /&gt;Yukarıdaki örnekte x ve y sayıları için desimal sistemde klavyeden giriş yapılmaktadır. Giriş arasına istenildiği kadar boşluk karakteri konulabilir. Yani ilk sayıyı girdikten sonra ikinci sayıyı SPACE, TAB ya da ENTER tuşuna bastıktan sonra girebilirsiniz. Örneğin:&lt;br /&gt;&lt;br /&gt;5 60&lt;br /&gt;&lt;br /&gt;biçiminde bir giriş geçerli olacağı gibi;&lt;br /&gt;&lt;br /&gt;5&lt;br /&gt;60&lt;br /&gt;&lt;br /&gt;biçiminde bir giriş de geçerlidir. scanf fonksiyonuna gönderilecek diğer argumanlar &amp; operatörü ile kullanılmaktadır. &amp; bir gösterici operatörüdür. Bu operatörü göstericiler konusunda öğreneceğiz.&lt;br /&gt;&lt;br /&gt;scanf fonksiyonunun yalnızca giriş için kullanılır, ekrana yazmak için printf fonksiyonunu kullanmamız gerekir :&lt;br /&gt;&lt;br /&gt;int number;&lt;br /&gt;&lt;br /&gt;printf(“bir sayi giriniz : “);&lt;br /&gt;scanf(“%d”, &amp;number);&lt;br /&gt;&lt;br /&gt;C++ dilinde bir fonksiyon tanımlanmasında fonksiyonun geri dönüş değerinin türü olarak void anahtar sözcüğü yazılmamışsa, fonksiyon return anahtar sözcüğü kullanılarak mutlaka bir geri dönüş değeri üretmelidir. Fonksiyonun geri dönüş değeri üretmemesi durumunda derleme zamanında hata oluşacaktır. Yani C dilinde olduğu gibi rasgele bir değer üretilmesi söz konusu değildir. Yine C++ dilinde geri dönüş değeri üretecek bir fonksiyonun tanımlanması içinde return anahtar sözcüğü yalın olarak kullanılamaz. return anahtar sözcüğünün yanında mutlaka bir ifade yer almalıdır.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-2594206638115605288?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/2594206638115605288/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=2594206638115605288' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/2594206638115605288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/2594206638115605288'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2007/12/fonksiyonlar.html' title='c FONKSİYONLAR'/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-1393956341295780379</id><published>2007-12-08T09:53:00.001-08:00</published><updated>2008-10-13T12:58:39.747-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c dosyalama'/><category scheme='http://www.blogger.com/atom/ns#' term='c de dosyalar'/><title type='text'>c de dosyalar</title><content type='html'>DOSYALAR&lt;br /&gt;&lt;br /&gt;İkincil bellekte tanımlanmış bölgelere dosya denir. Her dosyanın bir ismi vardır. Ancak dosyaların isimlendirme kuralları sistemden sisteme göre değişebilmektedir. Dosya işlemleri tamamen işletim sisteminin kontrolü altındadır.&lt;br /&gt;&lt;br /&gt;İşletim sistemi de ayrı ayrı yazılmış fonksiyonların birbirlerini çağırması biçiminde çalışır. Örneğin komut satırında ismi yazılmış olan bir programın çalıştırılması birkaç sistem fonksiyonunun çağırılması ile yapılmaktadır. Komut satırından yazıyı alan, diskte bir dosyayı arayan, bir dosyayı RAM’e yükleyen, RAM’deki programı çalıştıran fonksiyonlar düzenli olarak çağırılmaktadır.&lt;br /&gt;&lt;br /&gt;İşletim sisteminin çalışması sırasında kendisinin de çağırdığı, sistem programcısının da dışarıdan çağırabildiği işletim sistemine ait fonksiyonlara sistem fonksiyonları denir. Bu tür fonksiyonlara Windows sisteminde API (Application Proggramming Interface) fonksiyonları, UNIX işletim sisteminde ise sistem çağırmaları (system calls) denir.&lt;br /&gt;Aslında bütün dosya işlemleri, hangi programlama dili ile çalışılırsa çalışılsın, işletim sisteminin sistem fonksiyonları tarafından yapılır. Sistem fonksiyonlarının isimleri ve parametrik yapıları sistemden sisteme değişebilmektedir.&lt;br /&gt;Dosyalara İlişkin Temel Kavramlar&lt;br /&gt;Dosyanın Açılması&lt;br /&gt;Bir dosya üzerinde işlem yapmadan önce dosya açılmalıdır. Dosya açabilmek için işletim sisteminin “dosya aç” isimli bir sistem fonksiyonu kullanılır. Dosyanın açılması sırasında dosya ile ilgili çeşitli ilk işlemler işletim sistemi tarafından yapılır.&lt;br /&gt;&lt;br /&gt;Bir dosya açıldığında, dosya bilgileri, ismine “Dosya Tablosu” (File table) denilen ve işletim sisteminin içerisinde bulunan bir tabloya yazılır. Dosya tablosunun biçimi sistemden siteme değişebilir. Örneğin tipik bir dosya tablosu şağıdaki gibi olabilir :&lt;br /&gt;&lt;br /&gt;Dosya tablosu (File table)&lt;br /&gt;Sıra No&lt;br /&gt;Dosya ismi&lt;br /&gt;Dosyanın Diskteki Yeri&lt;br /&gt;Dosyanın Özellikleri&lt;br /&gt;Diğerleri&lt;br /&gt;0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12&lt;br /&gt;AUTOEXEC.BAT&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sistem fonksiyonlarının da parametreleri ve geri dönüş değerleri vardır. "Dosya aç" sistem fonksiyonunun parametresi açılacak dosyanın ismidir.Fonksiyon, dosya bilgilerinin yazıldığı sıra numarası ile geri döner ki bu değere "file handle" denir. Bu handle değeri diğer dosya fonksiyonlarına parametre olarak geçirilir. Dosyanın açılması sırasında buna ek olarak başka önemli işlemler de yapılmaktadır.&lt;br /&gt;Dosyanın Kapatılması&lt;br /&gt;Dosyanın kapatılması açılması sırasında yapılan işlemlerin geri alınmasını sağlar. Örneğin dosyanın kapatılması sırasında, işletim sisteminin dosya tablosunda bulunan bu dosyaya ilişkin bilgiler silinir. Açılan her dosya kapatılmalıdır. Kapatılmaması çeşitli problemlere yol açabilir.&lt;br /&gt;Dosyaya Bilgi Yazılması ve Okunması&lt;br /&gt;İşletim sistemlerinin dosyaya n byte veri yazan ve dosyadan n byte veri okuyan sistem fonksiyonları vardır. Yazma ve okuma işlemleri bu fonksiyonlar kullanılarak yapılır.&lt;br /&gt;Dosya pozisyon göstericisi (file pointer)&lt;br /&gt;Bir dosya byte’lardan oluşur. Dosyadaki her bir byte’a 0’dan başlayarak artan sırada bir sayı karşılık getirilmiştir. Bu sayıya ilgili byte’ın ofset numarası denir. Dosya pozisyon göstericisi long türden bir sayıdır ve bir ofset değeri belirtir. Dosyaya yazan ve dosyadan okuma yapan fonksiyonlar bu yazma ve okuma işlemlerini her zaman dosya pozisyon göstericisinin gösterdiği yerden yaparlar. Örneğin dosya göstericisinin gösterdiği yer 100 olsun. Dosyadan 10 byte bilgi okumak için sistem fonksiyonu çağırıldığında, 100. ofsetden itibaren 10 byte bilgi okunur. İşletim sisteminin dosya göstericisini konumlandıran bir sistem fonksiyonu vardır. Dosya ilk açıldığında dosya göstericisi 0. ofsetdedir. Örneğin bir dosyanın 100. Ofsetinden itibaren 10 byte okunmak istenirse sırası ile şu işlemlerin yapılması gerekir:&lt;br /&gt;&lt;br /&gt;İlgili dosya açılır.&lt;br /&gt;Dosya pozisyon göstericisi 100. Offsete konumlandırılır.&lt;br /&gt;Dosyadan 10 byte okunur.&lt;br /&gt;Dosya kapatılır.&lt;br /&gt;&lt;br /&gt;C dilinde dosya işlemleri 2 biçimde yapılabilir :&lt;br /&gt;&lt;br /&gt;1. İşletim sisteminin sistem fonksiyonları doğrudan çağırılarak.&lt;br /&gt;2. Standart C fonksiyonları kullanılarak.&lt;br /&gt;&lt;br /&gt;Prototipleri stdio.h içerisinde olan standart dosya fonksiyonlarının hepsinin ismi f ile başlar.Tabi standart C fonksiyonları da işlemlerini yapabilmek için aslında işletim sisteminin sistem fonksiyonlarını çağırmaktadır. İşletim sisteminin sistem fonksiyonları taşınabilir değildir. İsimleri ve parametrik yapıları sistemden sisteme değişebilir. Bu yüzden standart C fonksiyonlarının kullanılması tavsiye edilir.&lt;br /&gt;fopen fonksiyonu&lt;br /&gt;FILE *fopen (const char *fname, const char *mode)&lt;br /&gt;&lt;br /&gt;Fonksiyonun 1. Parametresi açılacak dosyanın ismidir. 2. Parametre açış modudur. Dosya ismi path içerebilir. Dizin geçişleri için / de konulabilir. Açış modu şunlar olabilir :&lt;br /&gt;&lt;br /&gt;Mode&lt;br /&gt;Anlamı&lt;br /&gt;"w"&lt;br /&gt;Dosyayı yazmak için açar. Dosyadan okuma yapılamaz. Dosyanın mevcut olaması zorunlu değildir. Dosya mevcut değilse yaratılır. Dosya mevcut ise sıfırlanır.&lt;br /&gt;"w+"&lt;br /&gt;Dosyayı yazma ve okuma için açar. Dosyanın mevcut olaması zorunlu değildir. Dosya mevcut değilse yaratılır. Dosya mevcut ise sıfırlanır.&lt;br /&gt;"r"&lt;br /&gt;Dosyayı okuma için açar. Dosyaya yazma yapılamaz. Dosya mevcut değilse açılamaz.&lt;br /&gt;"r+"&lt;br /&gt;Dosyayı okuma ve yazma için açar. (Dosyanın pozisyon göstericisi dosyanın başındadır). Dosya mevcut değilse açılamaz.&lt;br /&gt;"a"&lt;br /&gt;Dosyayı sonuna ekleme için açar. Dosyadan okuma yapılamaz. Dosyanın mevcut olaması zorunlu değildir. Dosya mevcut değilse yaratılır.&lt;br /&gt;"a+"&lt;br /&gt;Dosyayı sonuna ekleme ve dosyadan okuma için açar. Dosyanın mevcut olaması zorunlu değildir. Dosya mevcut değilse yaratılır.&lt;br /&gt;&lt;br /&gt;Fonksiyonun geri dönüş değerine ilişkin FILE yapısı stdio.h içerisinde bildirilmiştir. Fonskiyonun geri dönüş değeri FILE yapısı türünden bir adrestir. Bu yapının elemanları standart değildir. Sistemden sisteme değişiklik gösterebilir. Zaten programcı bu yapının elemanlarına gereksinim duymaz. fopen fonksiyonu işletim sisteminin dosya aç sistem fonksiyonunu çağırarak dosyayı açar ve dosyaya ilişkin bazı bilgileri bu FILE yapısı içerisine yazarak bu yapının başlangıç adresini geri döndürür. Örneğin "file handle" değeri de bu yapının içerisindedir. Tabi fopen fonksiyonunun geri verdiği FILE türünden adres güvenli bir adrestir. Dosya çeşitli sebeplerden dolayı açılamayabilir. Bu durumda fopen NULL gösterici döndürür. Fonksiyonun geri dönüş değeri kesinlikle kontrol edilmelidir. Tipik bir kontrol işlemi aşağıdaki gibi yapılabilir:&lt;br /&gt;&lt;br /&gt;if ((f = fopen(“data”, “r”)) == NULL) {&lt;br /&gt;printf(“cannot open file”...\n);&lt;br /&gt;exit(1);}&lt;br /&gt;&lt;br /&gt;Dosya ismi dosyanın yeri hakkında bilgi (sürücü, path gibi) içerebilir. Dosya ismi string ile veriliyorsa path bilgisi verirken dikkatli olmak gerekecektir. path bilgisi \ karakteri içerebilir. string içinde \ karakterinin kullanılması, \ karakterininin onu izleyen karakterle birlikte önceden belirlenmiş ters bölü karakter sabiti olarak yorunlanmasına yol açabilecektir. Örneğin :&lt;br /&gt;&lt;br /&gt;fopen("C:\source\new.dat", "r");&lt;br /&gt;&lt;br /&gt;fonksiyon çağırımında derleyici \n karakterini "newline" karakteri olarak yorumlayacak \s karakterini ise "undefined" kabul edecektir. Bu problemden sakınmak \ yerine \\ kullanılmasıyla mümkün olur:&lt;br /&gt;&lt;br /&gt;fopen("C:\\source\\new.dat", "r");&lt;br /&gt;&lt;br /&gt;Append modları ("a", "a+") çok kullanılan modlar değildir. Dosyaya yazma durumunda "w" modu ile "a" modu arasında farklılık vardır. "w" modunda dosyada olan ofsetin üzerine yazılabilir. "a" modunda ise dosya içeriği korunarak sadece dosyanın sonuna yazma işlemi yapılabilir. Bir dosyanın hem okuma hem de yazma amacıyla açılması durumunda (yani açış modunu belirten stringde '+' karakterinin kullanılması durumunda dikkatli olmak gerekir. Okuma ve yazma işlemleri arasında mutlaka ya dosya pozisyon göstericisinin konumlandırılması (mesela fseek fonksiyonu ile) ya da dosyaya ilişken tampon bellek alanının (buffer) tazelenmesi gerekecektir.&lt;br /&gt;&lt;br /&gt;Bir dosyanın açılıp açılamayacağını aşağıdaki şekilde test edebiliri:&lt;br /&gt;&lt;br /&gt;Program komut satırından&lt;br /&gt;&lt;br /&gt;canopen dosya.dat&lt;br /&gt;&lt;br /&gt;şeklinde çalıştırıldığında ekrana "xxxxx dosyası açılabilir" ya da "xxxxx dosyası açılamaz" yazacaktır.&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;FILE *fp;&lt;br /&gt;&lt;br /&gt;if (argc != 2) {&lt;br /&gt;printf("usage: canopen filename\n");&lt;br /&gt;return 2;&lt;br /&gt;}&lt;br /&gt;if ((fp = fopen(argv[1], "r")) == NULL) {&lt;br /&gt;printf("%s dosyası açılamaz\n", argv[1]);&lt;br /&gt;return 1;&lt;br /&gt;}&lt;br /&gt;printf("%s dosyası açılabilir\n", argv[1]);&lt;br /&gt;fclose(fp);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;fclose fonksiyonu&lt;br /&gt;int fclose(FILE *stream);&lt;br /&gt;Bu fonksiyon açılmış olan bir dosyayı kapatır. Fonksiyon fopen ya da fropen fonksiyonundan elde edilen FILE yapısı türünden adresi parametre olarak alır ve açık olan dosyayı kapatır. Fonksiyonun geri dönüş değeri 0 ise dosya başarılı olarak kapatılmıştır. Fonksiyonun geri dönüş değeri EOF ise dosya kapatılamamıştır. EOF stdio.h içinde tanımlanan bir sembolik sabittir ve derleyicilerin çoğunda (-1) olarak tanımlanmıştır. Fonksiyonun başarısı ancak şüphe altında test edilmelidir. Normal şartlar altında dosyanın kapatılmaması için bir neden yoktur.&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *f;&lt;br /&gt;&lt;br /&gt;if ((f = fopen(“data”, “w”)) ==NULL) {&lt;br /&gt;printf(“cannot open file”...\n);&lt;br /&gt;exit(1);&lt;br /&gt;}&lt;br /&gt;fclose(f);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fgetc fonksiyonu&lt;br /&gt;int fgetc(FILE *f);&lt;br /&gt;&lt;br /&gt;İşletim sisteminin dolayısıyla C’nin yazma ve okuma yapan fonksiyonları yazılan ve okunan miktar kadar dosya göstericisini ilerletirler. fgetc fonksiyonu dosya göstericisinin gösterdiği yerdeki byte’ı okur ve geri dönüş değeri olarak verir. Fonksiyon başarısız olursa , stdio.h dosyası içerisinde sembolik sabit olarak tanımlanmış EOF değerine geri döner. Pek çok derleyici de EOF sembolik sabiti aşağıdaki gibi tanımlanmıştır.&lt;br /&gt;&lt;br /&gt;#define EOF (-1)&lt;br /&gt;&lt;br /&gt;fgetc fonksiyonunun geri dönüş değerini char türden bir değişkene atamak yanlış sonuç verebilir, bu konuda dikkatli olunmalı ve fonksiyonun geri dönüş değeri int türden bir değişkende saklanmalıdır.&lt;br /&gt;&lt;br /&gt;char ch;&lt;br /&gt;...&lt;br /&gt;ch = fgetc(fp);&lt;br /&gt;&lt;br /&gt;Yukarıda dosyadan okunan karakterin 255 numaralı ASCII karakteri (0x00FF) olduğunu düşünelim. Bu sayı char türden bir değişkene atandığında yüksek anlamlı byte'ı kaybedilecek ve ch değişkenine 0xFF değeri atanacaktır. Bu durumda ch değişkeni işaretli char türden olduğundan ch değişkeni içinde negatif bir sayının tutulduğu anlamı çıkar.&lt;br /&gt;&lt;br /&gt;if (ch == EOF)&lt;br /&gt;&lt;br /&gt;gibi bir karşılaştırma deyiminde, if parantezi içerisindeki karşılatırma işleminin yapılabilmesi için otomatik tür dönüşümü yapılır. Bu otomatik tür dönüşümünde işaretli int türüne çevrilecek ch değişkeni FF byte'ı ile beslenecektir. (negatif olduğu için). Bu durumda eşitlik karşılaştırması doğru netice verecek, yani dosyanın sonuna gelindiği (ya da başka nedenden dolayı okumanın yapılamadığı) yorumu yapılacaktır.&lt;br /&gt;&lt;br /&gt;Oysa ch değişkeni int türden olsaydı, ch değişkenine atanan değer 0x00FF olacak ve bu durumda karşılaştırma yapıldığında ch değişkeni ile EOF değerinin (0xFFFF) eşit olmadığı sonucuna varılacaktır.&lt;br /&gt;&lt;br /&gt;Bir dosyanın içeriğini ekrana yazdıran örnek program:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *f;&lt;br /&gt;char fname[MAX_PATH];&lt;br /&gt;int ch;&lt;br /&gt;&lt;br /&gt;printf(“Dosya ismi : “);&lt;br /&gt;gets(fname);&lt;br /&gt;if (f = fopen(fname, “r”)) == NULL) {&lt;br /&gt;printf(“cannot open file...\n”);&lt;br /&gt;exit(1);&lt;br /&gt;}&lt;br /&gt;while (ch = fgetc(f)) != EOF)&lt;br /&gt;putchar(ch);&lt;br /&gt;fclose(f);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;not : maximum path uzunluğu DOS’da 80 UNIX ve WINDOWS’da 256 karakteri geçemez.&lt;br /&gt;fputc Fonksiyonu&lt;br /&gt;int fputc(int ch, FILE *p);&lt;br /&gt;Bu fonksiyon dosya göstericisinin bulunduğu yere 1 byte bilgiyi yazar. Fonksiyonun 1. parametresi yazılacak karakter, 2. parametresi ise yazılacak dosyaya ilişkin FILE yapısı adresidir. Fonksiyonun geri dönüş değeri EOF ise işlem başarısızdır. Değilse fonksiyon yazılan karakter ile geri döner.&lt;br /&gt;&lt;br /&gt;fgetc ve fputc fonksiyonları kullanılarak bir dosyayı kopyalayan örnek program:&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;#define MAX_PATH 80&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *fsource, *fdest;&lt;br /&gt;char source[MAX_PATH], dest[MAX_PATH];&lt;br /&gt;int ch;&lt;br /&gt;&lt;br /&gt;printf(“kopyalanacak dosya : “);&lt;br /&gt;gets(source);&lt;br /&gt;printf(“kopya dosya : “);&lt;br /&gt;gets (dest);&lt;br /&gt;if ((fsource = fopen(source, “r”)) == NULL) {&lt;br /&gt;printf(“cannot open file...\n”);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;if ((fdest = fopen(dest, “w”)) == NULL) {&lt;br /&gt;printf(“cannot create file...\n”);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;while ((ch = fgetc(fsource)) != EOF)&lt;br /&gt;fputc(ch, fdest);&lt;br /&gt;fclose(fsource);&lt;br /&gt;fclose(fdest);&lt;br /&gt;printf(“1 file copied...\n”);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fprintf Fonksiyonu&lt;br /&gt;Bu fonksiyon tıpkı printf fonksiyonu gibidir. Ancak ilk parametresi yazma işleminin hangi dosyaya yapılacağını belirtir. Diğer parametreleri printf fonksiyonun da olduğu gibidir. Özetle printf fonksiyonu ekrana yazar ancak fprint fonksiyonu 1. parametre değişkeninde belirtilen dosyaya yazar.&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;#define MAX_PATH 80&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *f;&lt;br /&gt;int i;&lt;br /&gt;&lt;br /&gt;if ((f = fopen(“data”, “w”)) ==NULL) {&lt;br /&gt;printf(“cannot open file...\n");&lt;br /&gt;exit(1);&lt;br /&gt;}&lt;br /&gt;for (i = 0; i &lt; 10; ++i)&lt;br /&gt;fprintf(f, “sayi = %d\n”, i);&lt;br /&gt;fclose(f);&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fgets fonksiyonu&lt;br /&gt;char *fgets(char *buf, int n, FILE *f);&lt;br /&gt;&lt;br /&gt;Bu fonksiyon dosya göstericisinin gösterdiği yerden 1 satırlık bilgiyi okur. Fonksiyon dosyadan '\n' karakterini okuyunca onu da birinci parametresinde verilen adrese yazarak işlemini sonlandırır.&lt;br /&gt;&lt;br /&gt;Fonksiyonun 1. parametresi okunacak bilginin RAM'de yerleştirileceği yerin adresidir. 2. parametresi ise okunacak maksimum karakter sayısıdır. fgets en fazla n –1 karakteri okur. Okuduğu karakterlerin soonuna null karakteri ekler ve işlemini sonlandırır. Eğer satır üzerindeki karakter sayısı n- 1'den az ise tüm satırı okur ve işlemini sonlandırır. Örneğin bu parametreyi 10 olarak girdiğimizi düşünelim. Satır üzerinde 20 karakter olsun. Fonksiyon 9 karakteri okur, sonuna NULL karakteri ekler. Ancak satır üzerinde \n dahil olmak üzere 5 karakter olsaydı fonksiyon bu 5 karakteri de okuyarak sonuna da NULL karakter ekleyerek işlemini sonlandıracaktı. Bir döngü içerisinde fgets fonksiyonu sürekli olarak çağırılarak bütün dosya okunabilir.&lt;br /&gt;&lt;br /&gt;Fonksiyonun geri dönüş değeri, en az 1 karakter okunmuş ise 1. parametresi ile belirtilen adresin aynısı, hiç okunmamışsa NULL adresidir.&lt;br /&gt;&lt;br /&gt;Örnek : Bir dosyayı fgets fonksiyonu ile satır satır olarak ekrana yazan program:&lt;br /&gt;&lt;br /&gt;#define MAX_PATH 80&lt;br /&gt;#define MBUFSIZE 100&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *f;&lt;br /&gt;char s[MAX_PATH];&lt;br /&gt;char buf[BUFSIZE];&lt;br /&gt;&lt;br /&gt;printf(“Dosya : “);&lt;br /&gt;gets(s);&lt;br /&gt;if ((f = fopen(s, “r”)) == NULL) {&lt;br /&gt;printf(“cannot open file...\n”);&lt;br /&gt;exit(1);&lt;br /&gt;}&lt;br /&gt;while (fgets(buf, BUFSIZE, f) != NULL)&lt;br /&gt;printf(“%s”, buf);&lt;br /&gt;fclose(f);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;Text ve Binary Dosya Kavramları&lt;br /&gt;DOS VE WINDOWS işletim sistemlerinde bir dosya text ve binary modda açılabilir. Varsayılan açış modu textdir. Yani dosyanın hangi modda açıldığı açık bir şekilde belirtilmezse dosyanın text modda açıldığı varsayılacaktır. Dosyayı binary modda açabilmek için açış modunun sonuna b eklemek gerekir. Örneğin :&lt;br /&gt;&lt;br /&gt;f = fopen(“data”, “r”) text modda&lt;br /&gt;f = fopen(“data, “rb”) binary modda&lt;br /&gt;&lt;br /&gt;DOS’da bir dosya type edildiğinde bir karakter aşağı satırın başında görünüyorsa bunu sağlamak için o karakterden önce CR (carriage return) ve LF (line feed) karakterlerinin bulunması gerekir. CR karakteri C’de ‘\r’ ile belirtilir. 13 numaralı ASCII karakteridir. LF karakteri C’de \n ile belirtilir. 10 numaralı ASCII karakteridir. Örneğin bir dosya type edildiğinde görüntü&lt;br /&gt;&lt;br /&gt;a&lt;br /&gt;b&lt;br /&gt;&lt;br /&gt;şeklinde olsun. Dosyadaki durum a\r\nb şeklindedir. Oysa UNIX sistemlerinde aşağı satırın başına geçebilmek için sadece LF karakteri kullanılmaktadır. UNIX de&lt;br /&gt;&lt;br /&gt;a&lt;br /&gt;b&lt;br /&gt;&lt;br /&gt;görüntüsünün dosya karşılığı&lt;br /&gt;&lt;br /&gt;a\nb biçimindedir.&lt;br /&gt;&lt;br /&gt;DOS’da LF karakteri bulunulan satırın aşağısına geç CR karakteri ise bulunulan satırın başına geç anlamındadır. Örneğin DOS da bir bir dosyanın içeriği a\nb biçiminde ise dosya type edildiğinde&lt;br /&gt;a&lt;br /&gt;b&lt;br /&gt;&lt;br /&gt;görüntüsü elde edilir. Eğer dosyanın içeriği a\rb biçiminde ise dosya type edildiğinde&lt;br /&gt;b&lt;br /&gt;görüntüsü elde edilir.&lt;br /&gt;&lt;br /&gt;printf fonksiyonunda \n ekranda aşağı satırın başına geçme amacıyla kullanılır. Aslında biz printf fonksiyonunun 1. parametresi olan stringin içine \n yerleştirdiğimizde UNIX'de yalnızca \ni DOS'da ise \r ve\n ile bu geçiş sağlanır.&lt;br /&gt;&lt;br /&gt;Text dosyaları ile rahat çalışabilmek için dosyalar text ve binary olarak ikiye ayrılmıştır. Bir dosya text modunda açıldığında dosyaya \n karakteri yazılmak istendiğinde dosya fonksiyonları otomatik olarak \r ve \n karakterlerini dosyaya yazarlar. Benze r bir biçimde dosya text modda açılmışsa dosya göstericisi \r\n çiftini gösteriyorsa dosyadan yalnızca /n karakteri okunur. DOS işletim sisteminde text ve binary dosyalar arasındaki başka bir fark da, CTRL Z (26 numaralı ASCII karakterinin) dosyayı sonlandırdığının varsayılmasıdır. Oysa dosya binary modda açıldığında böyle bir varsayım yapılmaz.&lt;br /&gt;&lt;br /&gt;UNIX işletim sisteminde text modu ile binary mod arasında hiçbir fark yoktur. Yani UNIX işletim sisteminde dosyanın binary mod yerine text modunda açılmasının bir sakıncası olmayacaktır. Ancak DOS altında text dosyası olmayan bir dosyanın binary mod yerine text modunda açılmasının sakıncaları olabilir. Örneğin DOS altında bir exe dosyanın binary mod yerine text modda açıldığını düşünelim. Bu dosyada 10 numaralı ve 13 numaralı ASCII karakterleri yanyana bulunduğunda dosyadan yalnızca 1 byte okunacaktır. Aynı şekilde dosyadan 26 numaralı ASCII karakteri okunduğunda dosyadan artık başka bir okuma yapılamayacaktır. (Dosyanın sonuna gelindiği varsayılacaktır.)&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;textmode.c programı&lt;br /&gt;DOS altında text modu ile binary mod arasındaki&lt;br /&gt;farkı gösteren bir program&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;FILE *fp;&lt;br /&gt;int k, ch;&lt;br /&gt;&lt;br /&gt;clrscr();&lt;br /&gt;fp = fopen("deneme", "w");&lt;br /&gt;if (fp == NULL) {&lt;br /&gt;printf("dosya açılamıyor\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* dosyaya 5 tane \n karakteri yazdırılıyor */&lt;br /&gt;&lt;br /&gt;for (k = 0; k &lt; 5; ++k)&lt;br /&gt;fputc('\n', fp);&lt;br /&gt;fclose(fp);&lt;br /&gt;&lt;br /&gt;printf("\ndosya binary modda açılarak yazdırılıyor\n");&lt;br /&gt;fp = fopen("deneme", "rb");&lt;br /&gt;if (fp == NULL) {&lt;br /&gt;printf("dosya açılamıyor\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;while ((ch = fgetc(fp)) != EOF)&lt;br /&gt;printf("%d ", ch);&lt;br /&gt;&lt;br /&gt;/* ekran çıktısı&lt;br /&gt;13 10 13 10 13 10 13 10 13 10&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;fclose(fp);&lt;br /&gt;&lt;br /&gt;printf("\ndosya kapatıldı. Şimdi dosya text modunda açılarak yazdırılıyor .\n");&lt;br /&gt;fp = fopen("deneme", "r");&lt;br /&gt;if (fp == NULL) {&lt;br /&gt;printf("dosya açılamıyor\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;while ((ch = fgetc(fp)) != EOF)&lt;br /&gt;printf("%d ", ch);&lt;br /&gt;&lt;br /&gt;/* ekran çıktısı&lt;br /&gt;10 10 10 10 10&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;fclose(fp);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* simdi '\x1A' karakterinin text modunda dosyayı sonlandırması özelliği&lt;br /&gt;test ediliyor */&lt;br /&gt;&lt;br /&gt;fp = fopen("deneme", "w");&lt;br /&gt;if (fp == NULL) {&lt;br /&gt;printf("dosya açılamıyor\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* dosyaya 5 tane 'A' karakteri yazdırılıyor */&lt;br /&gt;&lt;br /&gt;for (k = 0; k &lt; 5; ++k)&lt;br /&gt;fputc('A', fp);&lt;br /&gt;&lt;br /&gt;/* dosyaya '\x1A' karakteri yazdırılıyor */&lt;br /&gt;&lt;br /&gt;fputc('\x1a', fp);&lt;br /&gt;&lt;br /&gt;/* dosyaya 10 tane 'A' karakteri yazdırılıyor. */&lt;br /&gt;&lt;br /&gt;for (k = 0; k &lt; 5; ++k)&lt;br /&gt;fputc('A', fp);&lt;br /&gt;&lt;br /&gt;fclose(fp);&lt;br /&gt;printf("\ndosya binary modda açılarak yazdırılıyor :\n");&lt;br /&gt;fp = fopen("deneme", "rb");&lt;br /&gt;if (fp == NULL) {&lt;br /&gt;printf("dosya açılamıyor\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;while ((ch = fgetc(fp)) != EOF)&lt;br /&gt;printf("%d ", ch);&lt;br /&gt;&lt;br /&gt;/* ekran çıktısı&lt;br /&gt;65 65 65 65 65 26 65 65 65 65 65&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;printf("\ndosya kapatıldı, Şimdi dosya text modunda açılarak yazdırılıyor\n");&lt;br /&gt;fp = fopen("deneme", "r");&lt;br /&gt;if (fp == NULL) {&lt;br /&gt;printf("dosya açılamıyor\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;while ((ch = fgetc(fp)) != EOF)&lt;br /&gt;printf("%d ", ch);&lt;br /&gt;&lt;br /&gt;/* ekran çıktısı&lt;br /&gt;65 65 65 65 65 26 65 65 65 65 65&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;fclose(fp);&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;EOF (END OF FILE) DURUMU&lt;br /&gt;&lt;br /&gt;Dosyanın sonunda hiçbir özel karakter yoktur. İşletim sistemi dosyanın sonuna gelinip gelinmediğini dosyanın uzunluğuna bakarak anlayabilir. EOF durumu dosya pozisyon göstericisinin dosyada olmayan son karakteri göstermesi durumudur. EOF durumunda dosya pozisyon göstericisinin offset değeri dosya uzunluğu ile aynı değerdedir. EOF durumunda dosyadan okuma yapılmak istenirse dosya fonksiyonları başarısız olur. Ancak açış modu uygunsa dosyaya yazma yapılabilir ve bu durumda dosyaya ekleme yapılır.&lt;br /&gt;Daha önce söylendiği gibi C dilinde açılan bir dosya ile ilgili bilgiler FILE türünden bir yapı nesnesi içinde tutulur. Bu yapının her bir elemanı dosyanın bir özelliği hakkında bilgi vermektedir. C programcısı bu yapının elemanlarının değerleri ile doğrudan ilgilenmez, zira fopen fonksiyonunun geri dönüş değeri bu yapı nesnesini gösteren FILE yapısı türünden bir göstericidir ve C dilinin dosyalarla ilgili işlem yapan fonksiyonları çoğunlukla bu adresi parametre olarak alarak, istenilen dosyaya ulaşırlar.&lt;br /&gt;Söz konusu FILE yapısının elemanlarından biri de flag olarak kullanılan EOF indikatörüdür. (aslında int türden bir flag'in yalnızca belirli bir bitidir.) C dilinin dosyalarla ilgili işlem yapan bazı fonksiyonları EOF indikatörünün değerini değiştirirler. (set ya da clear ederler. Set edilmesi bu indikatöre 1 değerinin atanması clear edilmesi ise 0 değerinin atanmasıdır. Bu indikatörün set edilmesi demek dosya pozisyon göstericisinin dosyanın sonunu göstermesi demektir.&lt;br /&gt;Dosya açan fonksiyonlar FILE yapısındaki EOF indikatörünü sıfırlarlar. Bu fonksiyonlar dışında fseek fonksiyonu ve clearerr fonksiyonları da EOF indikatörünü sıfırlarlar. (clear ederler).&lt;br /&gt;&lt;br /&gt;fseek fonksiyonu :&lt;br /&gt;&lt;br /&gt;Bu fonksiyon dosya pozisyon göstericisini istenilen bir offsete konumlandırmak amacıyla kullanılır. Bu fonksiyonun kullanılmasıyla, açılmış bir dosyanın istenilen bir yerinden okuma yapmak ya da istenilen bir yerine yazmak mümkün hale gelir. Prototipi :&lt;br /&gt;&lt;br /&gt;int fseek(FILE *f, long offset, int origin);&lt;br /&gt;&lt;br /&gt;Fonksiyonun ikinci parametresi konumlandırma işleminin yapılacağı offset değeridir.&lt;br /&gt;Fonksiyonun 3. parametresi 0, 1, veya 2 olabilir. Bu değerler stdio.h dosyasında&lt;br /&gt;&lt;br /&gt;#define SEEK_SET 0&lt;br /&gt;#define SEEK_CUR 1&lt;br /&gt;#define SEEK_END 2&lt;br /&gt;&lt;br /&gt;biçiminde sembolik sabitlerle tanımlanmıştır ve fseek fonksiyonun çağırılmasında daha çok bu sembolik sabitler kullanılmaktadır.&lt;br /&gt;&lt;br /&gt;son parametre 0 ise, konumlandırma dosya başından itibaren yapılır. Bu durumda 2. parametre &gt;= 0 olmalıdır. Örneğin:&lt;br /&gt;&lt;br /&gt;fseek(f, 10L, 0);&lt;br /&gt;&lt;br /&gt;ile dosya göstericisi 10. offsete konumlandırılır. Ya da&lt;br /&gt;&lt;br /&gt;fseek(f, 0, 0);&lt;br /&gt;&lt;br /&gt;ile dosya göstericisi dosyanın başına konumlandırılır. Dosya pozisyon göstericisinin dosyanın başına konumlandırılması için rewind fonksiyonu da kullanılabilir:&lt;br /&gt;&lt;br /&gt;void rewind(FILE *fp);&lt;br /&gt;&lt;br /&gt;rewind(f);&lt;br /&gt;&lt;br /&gt;fonksiyonun 3. parametre değişkenine geçilen değer 1 ise (SEEK_CUR) , konumlandırma dosya göstericisinin en son bulunduğu yere göre yapılır. Bu durumda ikinci parametre pozitif ya da negatif değere sahip olabilir. Pozitif bir değer ileri, negatif bir değer geri anlamına gelecektir. Örneğin dosya göstericisi 10. offsette olsun.&lt;br /&gt;&lt;br /&gt;fseek(f, -1, SEEK_CUR);&lt;br /&gt;&lt;br /&gt;çağırması ile dosya göstericisi 9. offset'e konumlandırılır.&lt;br /&gt;&lt;br /&gt;fonksiyonun 3. parametre değişkenine geçilen değer 2 ise (SEEK_END), konumlandırma EOF durumundan itibaren yani dosya sonunu referans alınarak yapılır. Bu durumda ikinci parametre &lt;= 0 olmalıdır. Örneğin dosya göstericisini EOF durumuna çekmek için :&lt;br /&gt;&lt;br /&gt;fseek(f, 0, SEEK_END);&lt;br /&gt;&lt;br /&gt;çağırmasını yapmak gerekir. Ya da başka bir örnek:&lt;br /&gt;&lt;br /&gt;fseek(f, -1, SEEK_END);&lt;br /&gt;&lt;br /&gt;çağırması ile dosya göstericisi son karakterin offsetine çekilir. Fonksiyonun geri dönüş değeri işlemin başarısı hakkında bilgi verir. Geri dönüş değeri 0 ise işlem başarılıdır. Geri dönüş değeri 0 dışı bir değer ise işlem başarısızdır. Ancak problemli durumlarda geri dönüş değrinin test edilmesi tavsiye edilir.&lt;br /&gt;&lt;br /&gt;Yazma ve okuma işlemleri arasında dosya göstericisinin fseek fonksiyonu ile konumlandırılması gerekir.Konumlandırma gerekirse boş bir fseek çağırması ile yapılabilir. Örneğin dosyadan bir karakter okunup , bir sonraki karaktere bu karakterin 1 fazlasını yazacak olalım.&lt;br /&gt;&lt;br /&gt;ch = fgetc(f);&lt;br /&gt;fputc(ch + 1, f);&lt;br /&gt;&lt;br /&gt;işlemi hatalıdır. Yazmadan okumaya, okumadan yazmaya geçişte dosya göstericisi konumlandırılmalıdır.&lt;br /&gt;&lt;br /&gt;feof fonskiyonu :&lt;br /&gt;&lt;br /&gt;bu fonksiyon dosya göstericisinin EOF durumunda olup olmadığını (EOF indikatörünün set edilip edilmediğini) test etmek amacıyla kullanılır. Prototipi:&lt;br /&gt;&lt;br /&gt;int feof(FILE *f);&lt;br /&gt;&lt;br /&gt;Eğer dosya göstericisi dosya sonunda ise (EOF indikatörü set edilmişse) fonksiyon 0 dışı bir değere , değilse (EOF indikatörü set edilmemişse) 0 değeri ile geri döner.&lt;br /&gt;&lt;br /&gt;Ancak feof fonksiyonunun 0 dışı bir değere geri dönebilmesi için dosya göstericisinin dosyanın sonunda olmasının yanı sıra en son yapılan okuma işleminin de başarısız olması gerekir. daha önce söylendiği gibi bazı fonksiyonlar (fopen, fseek, rewind, clearerr) EOF indikatorünü clear ederler, yani EOF indikatörünün 0 değerinde olması (clear edilmiş olması) dosyanın sonunda olunmadığının bir garantisi değildir.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;fread ve fwrite fonksiyonları&lt;br /&gt;&lt;br /&gt;Bu iki fonksiyon C dilinde en çok kullanılan dosya fonksiyonlarıdır. Genel olarak dosya ile RAM arasında transfer yaparlar. Her iki fonskiyonun da prototipleri aynıdır.&lt;br /&gt;&lt;br /&gt;size_t fread(void *adr, size_t size, size_t n, FILE *);&lt;br /&gt;size_t fwrite (const void *adr, size_t size, size_t n, FILE *);&lt;br /&gt;&lt;br /&gt;size_t türünün derleyiciyi yazanlar tarafından unsigned int ya da unsigned long türünün typedef edilmiş yeni ismi olduğunu hatırlayalım.&lt;br /&gt;&lt;br /&gt;fread fonskiyonu dosya pozisyon göstericisinin gösterdiği yerden, 2. ve 3. parametresine kopyalanan değerlerin çarpımı kadar byte'ı , RAM'de 1. parametresinin gösterdiği adresten başlayarak kopyalar. Geleneksel olarak fonksiyonun 2. parametresi veri yapısının bir elemanının uzunluğunu, 3. parametresi ile parça sayısı biçiminde girilir.&lt;br /&gt;&lt;br /&gt;Bu fonksiyonlar sayesinde diziler ve yapılar tek hamlede dosyaya transfer edilebilirler. Örneğin 10 elemanlı bir dizi aşağıdaki gibi tek hamlede dosyaya yazılabilir.&lt;br /&gt;&lt;br /&gt;int a[5] = {3, 4, 5, 7, 8};&lt;br /&gt;&lt;br /&gt;fwrite (a, sizeof(int), 5, f);&lt;br /&gt;&lt;br /&gt;Yukarıdaki örnekte, dizi ismi olan a int türden bir adres bilgisi olduğu için, fwrite fonksiyonuna 1. arguman olarak gönderilebilir. FILE türünden f göstericisi ile ilişkilendirilen dosyaya RAM'deki a adresinden toplam sizeof(int) * 5 byte yazılmaktadır.&lt;br /&gt;Ancak tabi fwrite fonskiyonu sayıları bellekteki görüntüsü ile dosyaya yazar. (yani fprintf fonksiyonu gibi formatlı yazmaz.) Örneğin:&lt;br /&gt;&lt;br /&gt;int i = 1535;&lt;br /&gt;&lt;br /&gt;fwrite(&amp;i, sizeof(int), 1, f);&lt;br /&gt;&lt;br /&gt;Burada dosya type edilirse 2 byte uzunluğunda rasgele karakterler görünür. Çünkü DOS'da int türü 2 byte uzunluğundadır. Bizim gördüğümüz ise 1525'in rasgele olan bytelarıdır. Bilgileri ASCII karşılıkları ile dosyaya yazmak için fprintf fonksiyonu kullanılabilir..&lt;br /&gt;&lt;br /&gt;fread ve fwrite fonksiyonları bellekteki bilgileri transfer ettiğine göre dosyaların da binary modda açılmış olması uygun olacaktır.&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *f;&lt;br /&gt;int i;&lt;br /&gt;int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};&lt;br /&gt;int b[10];&lt;br /&gt;&lt;br /&gt;if ((f = fopen("data", w+b")) == NULL) {&lt;br /&gt;printf("cannot open file...\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;fwrite (a, sizeof(int), 10, f);&lt;br /&gt;fseek(f, 0, SEEK_SET);&lt;br /&gt;fread(b, sizeof(int), 10, f);&lt;br /&gt;for (i = 0; i &lt; 10; ++i)&lt;br /&gt;printf("%d\n", b[i]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fread ve fwrite fonksiyonlarının geri dönüş değerleri 3. parametresi ile belirtilen okunan ya da yazılan parça sayısıdır. Örneğin&lt;br /&gt;&lt;br /&gt;n = fread(a, sizeof(int), 10, f);&lt;br /&gt;&lt;br /&gt;ifadesinde fonksiyon bütün sayıları okuyabildiyse 10 sayısına geri döner. Eğer dosyadaki kalan byte sayısı okunmak istenen sayıdan az ise fonksiyon bütün byte'ları okur ve geri dönüş değeri okunan byte sayısı 2. parametresi ile belirtilen sayı olur. Örneğin DOS altında çalışıyor olalım. Dosyada 10 byte bilgi kalmış olsun.&lt;br /&gt;&lt;br /&gt;n = fread(a, sizeof(int), 10, f);&lt;br /&gt;&lt;br /&gt;ile fonksiyon 5 sayısına geri dönecektir.&lt;br /&gt;&lt;br /&gt;Aşağıdaki iki ifadeyi inceleyelim:&lt;br /&gt;&lt;br /&gt;fread(str, 100, 1, f);&lt;br /&gt;fread(str, 1, 100, f);&lt;br /&gt;&lt;br /&gt;her iki fonksiyon çağırma ifadesi de RAM'deki str adresine FILE türünden f göstericisi ile ilişkilendirilen dosyadan 100 byte okumak amacıyla kullanılabilir. Ancak birinci çağırmada geri dönüş değeri ya 0 ya 1 olabilecekken, ikinci fonksiyon çağırmasında geri dönüş değeri 0 100(dahil) herhangi bir değer olabilecektir.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Blok blok kopyalama işlemi&lt;br /&gt;&lt;br /&gt;Aşağıdaki örnekte bir grup byte fread fonskiyonu ile bir dosyadan okunmuş ve fwrite fonksiyonu ile diğer bir dosyaya yazılmıştır.&lt;br /&gt;&lt;br /&gt;#define BLOCK_SIZE 1024&lt;br /&gt;#define MAX_PATH 80&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *fs, *fd;&lt;br /&gt;char s[MAX_PATH], d[MAX_PATH];&lt;br /&gt;unsigned n;&lt;br /&gt;&lt;br /&gt;printf("kaynak dosya : ");&lt;br /&gt;gets(s);&lt;br /&gt;printf("amaç dosya : ");&lt;br /&gt;gets(d);&lt;br /&gt;if ((fs = fopen(s, "rb")) == NULL) {&lt;br /&gt;printf("cannot open file ...\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;if ((fd = fopen(d, "wb")) == NULL) {&lt;br /&gt;printf("cannot open file ...\n");&lt;br /&gt;fclose(fs);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;while ((n = fread(buf, 1, BLOCK_SIZE, fs)) &gt; 0)&lt;br /&gt;fwrite(buf, 1, n, fd);&lt;br /&gt;fclose(fs);&lt;br /&gt;fclose(fd);&lt;br /&gt;printf("1 file copied...\n");&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;remove fonksiyonu&lt;br /&gt;&lt;br /&gt;Bu fonksiyon bir dosyayı silmek için kullanılır. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;int remove (const char *filename);&lt;br /&gt;&lt;br /&gt;şeklindedir. Fonksiyona arguman olarak silinecek dosyanın ismi gönderilir. Fonksiyonun geri dönüş değeri, dosyanın başarılı bir şekilde silinebilmesi durumunda 0 aksi halde (yani dosya silinememişse) 0 dışı bir değerdir. Açık olan bir dosyanın silinmesi "implementation depended" (derleyiciye bağlı) olduğundan, yazılan kodun taşınabilirliği açısından, silinecek bir dosya açık ise önce kapatılmalıdır.&lt;br /&gt;&lt;br /&gt;rename fonksiyonu&lt;br /&gt;&lt;br /&gt;Bu fonksiyon bir dosyanın ismini değiştirmek için kullanılır. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;int rename (const char *old, const char *new);&lt;br /&gt;&lt;br /&gt;şeklindedir.&lt;br /&gt;&lt;br /&gt;Fonksiyona 1. arguman olarak dosyanın eski ismi ikinci arguman olarak ise dosyanın yeni ismi gönderilmelidir. Fonksiyonun geri dönüş değeri, isim değiştirmen işleminin başarılı olması durumunda 0, aksi halde (dosyanın ismi değiştirilemiyorsa 0 dışı bir değerdir. (Örneğin açık olan bir dosyanın isminin değiştirilmeye çalışılması başarılı olamayacağından fonksiyon bu durumda 0 dışı bir değere geri dönecektir.)&lt;br /&gt;&lt;br /&gt;tmpfile fonksiyonu&lt;br /&gt;&lt;br /&gt;Fonksiyon geçici bir dosya açmak amacıyla kullanılır. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;FILE * tmpfile(void);&lt;br /&gt;&lt;br /&gt;tmpfile fonksiyonu açtığı geçici dosyayı "wb" modunda açar. Açılan dosya fclose fonksiyonu ile kapatıldığında ya da (kapatılmazsa), program sona erdiğinde otomatik olarak silinecektir. Fonksiyonu geri dönüş değeri, açılan geçici dosya ile ilişki kurulmasına yarayacak, FILE yapısı türünden bir adrestir. Herhangi bir nedenle dosya geçici dosya açılamıyorsa fonksiyon NULL adresine geri dönecektir.&lt;br /&gt;&lt;br /&gt;tmpnam fonksiyonu&lt;br /&gt;&lt;br /&gt;Geçici olarak kullanılacak bir dosya için bir isim üretilmesi amacıyla kullanılır. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;char *tmpnam(char *s);&lt;br /&gt;&lt;br /&gt;şeklindedir. Fonksiyon ürettiği dosya ismini kendisine gönderilen char türden adrese yerleştirir. Eğer fonksiyona arguman olarak NULL adresi gönderilirse, fonksiyon üretilen dosya ismini statik bir dizi içinde tutarak bu dizinin adresiyle geri dönecektir. Fonksiyona char türden bir dizinin adresi gönderildiğinde bu dizinin boyutu ne kadar olmalıdır. Başka bir deyişle tmpnam fonksiyonu kaç karakter uzunluğunda bir dosya ismi üretecektir. İşte bu değer stdio.h dosyası içinde tanımlanan L_tmpnam sembolik sabitiyle belirtilmektedir.&lt;br /&gt;tmpnam fonksiyonunun ürettiği dosya isminin daha önce kullanılmayan bir dosya ismi olması garanti altına alınmıştır. Yani üretilen dosya ismi tektir. (unique file name) Bir programda daha sonra silmek üzere bir dosya açacağımızı ve bu dosyaya birtakım bilgileri yazacağımız düşünelim. Bu durumda dosyayı yazma modunda açacağımıza göre, açacağımız dosyaya olan bir dosyanın ismini veremeyiz. Eğer verirsek , var olan dosya sıfırlanacağı için bu dosyayı kaybederiz. Bu riske girmemek için, geçici olarak kullanılacak dosya tmpfiel fonksiyonu kullanılarak açılmalıdır. Ancak tmpfile fonksiyonunun kullanılması durumunda, açılan dosya kalıcı hale getirilemez. Yani herhangi bir nedenden dolayı geçici dosyanın silinmemesini istersek, (dosyayı kalıcı hale getirmek istersek) dosyayı fopen fonksiyonuyla açmalıyız. İşte bu durumda geçici dosyayı başka bir dosyayı riske etmemek için tmpnam fonksiyonunun ürettiği isim ile açmalıyız. Peki tmpnam fonksiyonuyla en fazla kaç tane "unique file name " üretebiliriz. İşte bu sayı stdio.h içinde tanımlanan TMP_MAX sembolik sabiti ile belirlenmiştir.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C dilinde bazı giriş ve çıkış birimleri(klavye, ekran gibi) doğrudan bir dosya gibi ele alınırlar. C standartları herhangi bir giriş çıkış birimini "stream" olarak isimlendirmektedir. Bir stream bir dosya olabileceği gibi, dosya olarak ele alınan bir giriş çıkış birimi de olabilir. Örneğin küçük programlar genellikle girdilerini genellikle tek bir stream,den alıp (mesela klavye) çıktılarını da tek bir streame (mesela ekran) iletirler.&lt;br /&gt;&lt;br /&gt;freopen fonksiyonu&lt;br /&gt;&lt;br /&gt;freopen fonksiyonu daha önce açılmış bir dosyayı, fropen fonksiyonu ile açılan dosyaya yönlendirir. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;FILE *freopen(const char *filename, const char *mode, FILE *stream);&lt;br /&gt;şeklindedir.&lt;br /&gt;&lt;br /&gt;Uygulamalarda daha çok standart dosyaların (stdin, stdout, stderr) başka dosyalara yönlendirilmesinde kullanılır. Örneğin bir programın çıktılarının data.dat isimli dosyaya yazılmasını istersek :&lt;br /&gt;&lt;br /&gt;if (freopen("data.dat", "w", stdout) == NULL) {&lt;br /&gt;printf("data.dat dosyası açılamıyor\n");&lt;br /&gt;exit(EXIT_FAILURE);}&lt;br /&gt;&lt;br /&gt;yukarıdaki fonksiyon çağırımıyla stdout dosyasının yönlendirildiği dosya kapatılarak (bu yönlendirme işlemi komut satırından yapılmış olabileceği gibi, freopen fonksiyonunun daha önceki çağırımı ile de yapılmış olabilir.) stdout dosyasının data.dat dosyasına yönlendirilmesi sağlanır.&lt;br /&gt;&lt;br /&gt;freopen fonksiyonunun geri dönüş değeri fonksiyona gönderilen üçüncü arguman olan FILE yapısı türünden göstericidir. freopen dosyası yönlendirmenin yapılacağı dosyayı açamazsa NULL adresine geri döner. Eğer yönlendirmenin yapıldığı eski dosya kapatılamıyorsa, freopen fonksiyonu bu durumda bir işaret vermez.&lt;br /&gt;&lt;br /&gt;dosya buffer fonksiyonları&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;İkincil belleklerle (disket, hard disk vs.) yapılan işlemler RAM'de yapılan işlemlere göre çok yavaştır. Bu yüzden bir dosyadan bir karakterin okunması ya da bir dosyaya bir karakterin yazılması durumunda her defasında dosyaya doğrudan ulaşmak verimli bir yöntem değildir.&lt;br /&gt;İşlemin performansı bufferlama yoluyla artırılmaktadır. Bir dosyaya yazılacak data ilk önce bellekteki bir buffer alanında saklanır. Bu buffer alanı dolduğunda ya da yazılmanın yapılacağı dosya kapatıldığında bufferdaki data alanında ne varsa dosyaya yazılır. Buna bufferin boşaltılması (to flush the buffer) denir.&lt;br /&gt;Giriş dosyaları da benzer şekilde bufferlanabilir. Giriş biriminden alınan data (örneğin klavyeden) önce buffera yazılır.&lt;br /&gt;dosyaların bufferlaması erimlilikte çok büyük bir artışa neden olur. Çünkü bufferdan (RAM'den) bir karakter okunması ya da buffera bir karakter yazılması ihmal edilecek kadar küçük bir zaman içinde yapılır. Buffer ile dosya arasındaki transfer şüphesiz yine vakit alacaktır ama bir defalık blok transferi, küçük küçük transferlerin toplamından çok daha kısa zaman alacaktır.&lt;br /&gt;&lt;br /&gt;stdio.h başlık dosyası içinde prototipi bildirimi yapılan ve dosyalarla ilgili işlem yapan fonksiyonlar tamponlamayı otomatik olarak gerçekleştirirler. Yani dosyaların tamponlanması için bizim birşey yapmamıza gerek kalmadan bu iş geri planda bize sezdirilmeden yapılmaktadır. Ama bazı durumlarda tamponlama konusunda programcı belirleyici durumda olmak isteyebilir. İşte bu durumlarda programcı dosya tamponlama fonksiyonlarını (fflush, setbuf, setvbuf) kullanacaktır:&lt;br /&gt;&lt;br /&gt;fflush fonksiyonu&lt;br /&gt;&lt;br /&gt;Bir program çıktısını bir dosyaya yazarken (örneğin stdout dosyasına) yazılan dosya ilk önce RAM'deki tamponlama alanına gider. Dosya kapatıldığında ya da tamponlama alanı dolduğunda, tamponlama alanı boşaltılarak dosyaya yazılır. fflush fonksiyonunun kullanılmasıyla, dosyanın kapatılması ya da tamponlama alanının dolması beklenmeksizin, tamponlama alanı boşatılarak dosyaya yazılır. Bu işlem istenilen sıklıkta yapılabilir. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;int fflush (FILE *stream);&lt;br /&gt;&lt;br /&gt;şeklindedir.&lt;br /&gt;&lt;br /&gt;fflush(fp);&lt;br /&gt;&lt;br /&gt;çağırımı ile FILE yapısı türünden fp göstericisi ile ilişkilendirilen dosyanın tamponlama alanı (buffer) boşaltılır. Eğer fflush fonksiyonuna NULL adresi gönderilirse, açık olan bütün dosyaların tamponlama alanları boşaltılacaktır.&lt;br /&gt;&lt;br /&gt;Tamponlama alanının boşaltılması işlemi başarılı olursa fflush fonksiyonu 0 değerine geri dönecek aksi halde EOF değerine geri dönecektir.&lt;br /&gt;&lt;br /&gt;setvbuf fonksiyonu&lt;br /&gt;&lt;br /&gt;setvbuf fonksiyonu bir dosyanın tamponlanma şeklinin değiştirilmesi ve tampon alanının yerinin ve boyutunun değiştirilmesi amacıyla kullanılır. Fonksiyonun prototipi aşağıdaki şekildedir :&lt;br /&gt;&lt;br /&gt;int setvbuf(FILE *stream, char *buf, int mode, size_t size);&lt;br /&gt;&lt;br /&gt;Fonksiyona gönderilen üçüncü arguman tamponlama şeklini belirler. Üçüncü argumanın değeri stdio.h başlık dosyası içinde tanımlanan sembolik sabitlerle belirlenir.&lt;br /&gt;&lt;br /&gt;_IOFBF (full buffering - tam tamponlama)&lt;br /&gt;data dosyaya tamponlama alanı dolduğunda yazılır. Ya da giriş tamponlaması söz konusu ise dosyadan okuma tamponlama alanı boş olduğu zaman yapılır.&lt;br /&gt;&lt;br /&gt;_IOLBF (line buffering - satır tamponlaması)&lt;br /&gt;Tamponlama alanı ile dosya arasındaki okuma ya da yazma işlemi satır satır yapılır.&lt;br /&gt;&lt;br /&gt;_IONBF (no buffering - tamponlama yok)&lt;br /&gt;Dosyadan okuma ya da soyaya yazma tamponlama olmadan doğrudan yapılır.&lt;br /&gt;&lt;br /&gt;setvbuf fonksiyonuna gönderilen ikinci arguman RAM'de tamponlamanın yapılacağı bloğun başlangıç adresidir. Tamponlamanın yapılacağı alan statik ya da dinamik ömürlü olabileceği gibi, dinamik bellek fonksiyonlarıyla da tahsis edilebilir.&lt;br /&gt;Fonksiyona gönderilen son arguman tamponlama alanında tutulacak byteların sayısıdır.&lt;br /&gt;&lt;br /&gt;setvbuf fonksiyonu dosya açıldıktan sonra, fakat dosya üzerinde herhangi biri işlem yapılmadan önce çağırılmalıdır. Fonksiyonun başarılı olması durumunda fonksiyon 0 değerine geri dönecektir. Fonksiyona gönderilen üçüncü argumanın geçersiz olması durumunda ya da fonksiyonun ilgili tamponlamayı yapamaması durumunda, geri dönüş değeri 0 dışı bir değer olacaktır.&lt;br /&gt;Fonksiyona gönderilen buffer alanının geçerliliğinin bitmesinden önce (ömrünün tamamlanmasından önce) dosya kapatılmamalıdır.&lt;br /&gt;&lt;br /&gt;dosya işlemleri ile ilgili örnek uygulamalar:&lt;br /&gt;&lt;br /&gt;Uygulama 1 : Dosya üzerinde sıralı veri tabanı tutulması&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;/* symbolic constants */&lt;br /&gt;#define MAX_PATH 80&lt;br /&gt;#define ADDREC 1&lt;br /&gt;#define LISTREC 2&lt;br /&gt;#define FINDREC 3&lt;br /&gt;#define DELREC 4&lt;br /&gt;#define EDITREC 5&lt;br /&gt;#define PACKRECS 6&lt;br /&gt;#define SORTREC 7&lt;br /&gt;#define EXITPROG 8&lt;br /&gt;#define DELETED 0&lt;br /&gt;#define NORMALREC 1&lt;br /&gt;#define INVALID 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* structure declarations */&lt;br /&gt;&lt;br /&gt;typedef struct _PERSON {&lt;br /&gt;char name[30];&lt;br /&gt;int no;&lt;br /&gt;int delflag;&lt;br /&gt;} PERSON;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* function prototypes */&lt;br /&gt;&lt;br /&gt;int GetOption(void);&lt;br /&gt;void AddRec(void);&lt;br /&gt;void ListRec(void);&lt;br /&gt;void FindRec(void);&lt;br /&gt;void DelRec(void);&lt;br /&gt;void EditRec(void);&lt;br /&gt;void SortRec(void);&lt;br /&gt;void Pack(void);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* global variables */&lt;br /&gt;&lt;br /&gt;FILE *f;&lt;br /&gt;char fname[MAX_PATH];&lt;br /&gt;&lt;br /&gt;/* function definitions */&lt;br /&gt;&lt;br /&gt;void AddRec(void)&lt;br /&gt;{&lt;br /&gt;PERSON per;&lt;br /&gt;&lt;br /&gt;printf("Adı soyadı : ");&lt;br /&gt;fflush(stdin);&lt;br /&gt;gets(per.name);&lt;br /&gt;printf("No : ");&lt;br /&gt;scanf("%d", &amp;per.no);&lt;br /&gt;per.delflag = NORMALREC;&lt;br /&gt;fseek(f, 0, SEEK_END);&lt;br /&gt;fwrite(&amp;per, sizeof(PERSON), 1, f);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void FindRec(void)&lt;br /&gt;{&lt;br /&gt;PERSON per;&lt;br /&gt;char name[30];&lt;br /&gt;&lt;br /&gt;printf("lütfen kayıt ismini giriniz :");&lt;br /&gt;fflush(stdin);&lt;br /&gt;gets(name);&lt;br /&gt;fseek(f, 0, SEEK_SET);&lt;br /&gt;while (fread(&amp;per, sizeof(PERSON), 1, f) &gt; 0) {&lt;br /&gt;if (per.delflag != NORMALREC)&lt;br /&gt;continue;&lt;br /&gt;if (!stricmp(per.name, name)) {&lt;br /&gt;printf("\n%s %d\n\n", per.name, per.no);&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;printf("\nKayıt bulunamadı...\n\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void ListRec(void)&lt;br /&gt;{&lt;br /&gt;PERSON per;&lt;br /&gt;&lt;br /&gt;putchar('\n');&lt;br /&gt;fseek(f, 0L, SEEK_SET);&lt;br /&gt;while (fread(&amp;per, sizeof(PERSON), 1, f) &gt; 0) {&lt;br /&gt;printf("\n%20s %5d", per.name, per.no);&lt;br /&gt;if (per.delflag == DELETED)&lt;br /&gt;printf("\tDELETED");&lt;br /&gt;}&lt;br /&gt;putchar('\n\n');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void DelRec(void)&lt;br /&gt;{&lt;br /&gt;char name[30];&lt;br /&gt;PERSON per;&lt;br /&gt;&lt;br /&gt;printf("Silinecek kayıtın adı ve soyadı : ");&lt;br /&gt;fflush(stdin);&lt;br /&gt;gets(name);&lt;br /&gt;fseek(f, 0, SEEK_SET);&lt;br /&gt;while (fread(&amp;per, sizeof(PERSON), 1, f) &gt; 0) {&lt;br /&gt;if (!stricmp(per.name, name)) {&lt;br /&gt;per.delflag = DELETED;&lt;br /&gt;fseek(f, -(long)sizeof(PERSON), 1);&lt;br /&gt;fwrite(&amp;per, sizeof(PERSON), 1, f);&lt;br /&gt;printf("Record deleted!..\n");&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;printf("silinecek kayıt bulunamadı");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void EditRec(void)&lt;br /&gt;{&lt;br /&gt;char name[30];&lt;br /&gt;PERSON per;&lt;br /&gt;&lt;br /&gt;printf("Değiştirilecek kayıtın adı ve soyadı : ");&lt;br /&gt;fflush(stdin);&lt;br /&gt;gets(name);&lt;br /&gt;fseek(f, 0, SEEK_SET);&lt;br /&gt;while (fread(&amp;per, sizeof(PERSON), 1, f) &gt; 0) {&lt;br /&gt;if (per.delflag == NORMALREC &amp;&amp; !stricmp(per.name, name)) {&lt;br /&gt;printf("Adı soyadı : ");&lt;br /&gt;fflush(stdin);&lt;br /&gt;gets(per.name);&lt;br /&gt;printf("No : ");&lt;br /&gt;scanf("%d", &amp;per.no);&lt;br /&gt;fseek(f, -(long)sizeof(PERSON), 1);&lt;br /&gt;fwrite(&amp;per, sizeof(PERSON), 1, f);&lt;br /&gt;printf("Record updated!..\n");&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;printf("değiştirilecek kayıt bulunamadı\n");&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int GetOption(void)&lt;br /&gt;{&lt;br /&gt;int option;&lt;br /&gt;&lt;br /&gt;printf("\n1) Kayıt Ekle\n");&lt;br /&gt;printf("2) Kayıt Listele\n");&lt;br /&gt;printf("3) Kayıt Bul\n");&lt;br /&gt;printf("4) Kayıt Sil\n");&lt;br /&gt;printf("5) Kayıt değiştir\n");&lt;br /&gt;printf("6) Pack\n");&lt;br /&gt;printf("7) Sırala\n");&lt;br /&gt;printf("8) Çık\n");&lt;br /&gt;printf("\nSeçiminiz :");&lt;br /&gt;scanf("%d", &amp;option);&lt;br /&gt;if (option &lt;&gt; 8)&lt;br /&gt;return INVALID;&lt;br /&gt;return option;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void SortRec(void)&lt;br /&gt;{&lt;br /&gt;PERSON per[2], tmp;&lt;br /&gt;int i, count, chgFlag;&lt;br /&gt;&lt;br /&gt;fseek(f, 0, SEEK_END);&lt;br /&gt;count = ftell(f) / sizeof(PERSON);&lt;br /&gt;&lt;br /&gt;do {&lt;br /&gt;chgFlag = 0;&lt;br /&gt;for (i = 0; i &lt; count - 1; ++i) {&lt;br /&gt;fseek(f, (long)i * sizeof(PERSON), SEEK_SET);&lt;br /&gt;if (fread(per, sizeof(PERSON), 2, f) != 2) {&lt;br /&gt;printf("cannot read from the file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;if (per[0].no &gt; per[1].no) {&lt;br /&gt;chgFlag = 1;&lt;br /&gt;&lt;br /&gt;tmp = per[0];&lt;br /&gt;per[0] = per[1];&lt;br /&gt;per[1] = tmp;&lt;br /&gt;&lt;br /&gt;fseek(f, (long)i * sizeof(PERSON), SEEK_SET);&lt;br /&gt;if (fwrite(per, sizeof(PERSON), 2, f) != 2) {&lt;br /&gt;printf("cannot read from the file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} while (chgFlag);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void Pack(void)&lt;br /&gt;{&lt;br /&gt;FILE *fnew;&lt;br /&gt;PERSON per;&lt;br /&gt;&lt;br /&gt;if ((fnew = fopen("temp", "wb")) == NULL) {&lt;br /&gt;printf("cannot create temporary file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;fseek(f, 0l, SEEK_SET);&lt;br /&gt;while (fread(&amp;per, sizeof(PERSON), 1, f) &gt; 0) {&lt;br /&gt;if (per.delflag == NORMALREC)&lt;br /&gt;fwrite(&amp;per, sizeof(PERSON), 1, fnew);&lt;br /&gt;}&lt;br /&gt;fclose(fnew);&lt;br /&gt;fclose(f);&lt;br /&gt;if (unlink(fname)) {&lt;br /&gt;printf("Fatal Error : Cannot open database file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;if (rename("temp", fname)) {&lt;br /&gt;printf("fatal Error: cannot delete database file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;if ((f = fopen(fname, "r+b")) == NULL) {&lt;br /&gt;printf("Fatal Error : Cannot open database file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;printf("Pack operation succesfully completed!..\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;char dfname[MAX_PATH];&lt;br /&gt;int option;&lt;br /&gt;&lt;br /&gt;printf("Data File : ");&lt;br /&gt;gets(dfname);&lt;br /&gt;if ((f = fopen(dfname, "r+b")) == NULL)&lt;br /&gt;if ((f = fopen(dfname, "w+b")) == NULL) {&lt;br /&gt;printf("Cannot open database file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;strcpy(fname, dfname);&lt;br /&gt;for (;;) {&lt;br /&gt;option = GetOption();&lt;br /&gt;switch (option) {&lt;br /&gt;case ADDREC : AddRec(); break;&lt;br /&gt;case LISTREC : ListRec(); break;&lt;br /&gt;case FINDREC : FindRec(); break;&lt;br /&gt;case DELREC : DelRec(); break;&lt;br /&gt;case EDITREC : EditRec(); break;&lt;br /&gt;case PACKRECS : Pack(); break;&lt;br /&gt;case SORTREC : SortRec(); break;&lt;br /&gt;case EXITPROG : goto EXIT;&lt;br /&gt;case INVALID : printf("Geçersiz Seçenek!..\n");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;EXIT:&lt;br /&gt;fclose(f);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Uygulama 2: developer's back up programı (G. Aslan)&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;#define GOOD 0&lt;br /&gt;#define FAIL (-1) &lt;br /&gt;&lt;br /&gt;#define FBUFSIZ (63*512) /* Buffer size */&lt;br /&gt;&lt;br /&gt;char *Buffer, *in_buf, *out_buf;&lt;br /&gt;char CmpFile[128], OutFile[128];&lt;br /&gt;&lt;br /&gt;int filecmp(FILE *fi, FILE *fo)&lt;br /&gt;{&lt;br /&gt;int c1, c2;&lt;br /&gt;long l1, l2;&lt;br /&gt;&lt;br /&gt;l1 = filelength(fileno(fi));&lt;br /&gt;l2 = filelength(fileno(fo));&lt;br /&gt;if (l1 != l2)&lt;br /&gt;return FAIL;&lt;br /&gt;&lt;br /&gt;rewind(fi);&lt;br /&gt;rewind(fo); &lt;br /&gt;for (;;) {&lt;br /&gt;c1 = getc(fi);&lt;br /&gt;c2 = getc(fo); &lt;br /&gt;&lt;br /&gt;if (c1 != c2) {&lt;br /&gt;return FAIL; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;if (c1 == EOF)&lt;br /&gt;break; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;return GOOD; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;int filecopy(FILE *fi, FILE *fo)&lt;br /&gt;{&lt;br /&gt;int c, nbytes;&lt;br /&gt;&lt;br /&gt;rewind(fi);&lt;br /&gt;rewind(fo); &lt;br /&gt;for (;;) {&lt;br /&gt;c = fread(Buffer, 1, FBUFSIZ, fi);&lt;br /&gt;if (c == 0) { &lt;br /&gt;break; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;nbytes = fwrite(Buffer, 1, c, fo);&lt;br /&gt;if (nbytes != c) {&lt;br /&gt;return FAIL; &lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;return GOOD; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;FILE *fi, *fo;&lt;br /&gt;char *ptr;&lt;br /&gt;int i;&lt;br /&gt;&lt;br /&gt;printf("*GA Developer's Backup Utility. Version 1.0\n"&lt;br /&gt;"(C) *GA, 1995\n\n");&lt;br /&gt;&lt;br /&gt;if (argc != 2) {&lt;br /&gt;fprintf(stderr, "Usage: BK \n");&lt;br /&gt;return 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ((Buffer = malloc(FBUFSIZ)) == NULL&lt;br /&gt;(in_buf = malloc(FBUFSIZ)) == NULL&lt;br /&gt;(out_buf = malloc(FBUFSIZ)) == NULL) {&lt;br /&gt;fprintf(stderr, "Not enough memory\n");&lt;br /&gt;return 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ((fi = fopen(argv[1], "rb")) == NULL) {&lt;br /&gt;ptr = argv[1]; &lt;br /&gt;OPN_ERR: &lt;br /&gt;fprintf(stderr, "File could not be opened: '%s'\n", ptr);&lt;br /&gt;return 3;&lt;br /&gt;}&lt;br /&gt;setvbuf(fi, in_buf, _IOFBF, FBUFSIZ); &lt;br /&gt;&lt;br /&gt;strcpy(CmpFile, argv[1]);&lt;br /&gt;ptr = strchr(CmpFile, '.');&lt;br /&gt;if (ptr == NULL)&lt;br /&gt;ptr = strchr(CmpFile, '\0');&lt;br /&gt;&lt;br /&gt;for (i = 1; i &lt;= 999; ++i) {&lt;br /&gt;sprintf(ptr, ".%03d", i);&lt;br /&gt;if (access(CmpFile, 0))&lt;br /&gt;break;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;if (i == 1000) {&lt;br /&gt;fprintf(stderr, "Backup operation failed: File limit!\n");&lt;br /&gt;return 3;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;strcpy(OutFile, CmpFile); &lt;br /&gt;&lt;br /&gt;if (i &gt; 1) {&lt;br /&gt;sprintf(ptr, ".%03d", i-1);&lt;br /&gt;&lt;br /&gt;if ((fo = fopen(CmpFile, "rb")) == NULL) {&lt;br /&gt;ptr = CmpFile;&lt;br /&gt;goto OPN_ERR;&lt;br /&gt;} &lt;br /&gt;setvbuf(fo, out_buf, _IOFBF, FBUFSIZ); &lt;br /&gt;&lt;br /&gt;if (!filecmp(fi, fo)) {&lt;br /&gt;printf("No differences encountered: '%s'\n", CmpFile);&lt;br /&gt;return 0;&lt;br /&gt;} &lt;br /&gt;fclose(fo); &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;printf("File being copied: %s ---&gt; %s\n", argv[1], OutFile);&lt;br /&gt;&lt;br /&gt;if ((fo = fopen(OutFile, "wb")) == NULL) {&lt;br /&gt;ptr = OutFile;&lt;br /&gt;goto OPN_ERR;&lt;br /&gt;}&lt;br /&gt;setvbuf(fo, out_buf, _IOFBF, FBUFSIZ); &lt;br /&gt;&lt;br /&gt;if (filecopy(fi, fo)) {&lt;br /&gt;fprintf(stderr, "File copy error!\n");&lt;br /&gt;return 4;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fcloseall();&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Uygulama 3 : bol.c ve bir.c programları :&lt;br /&gt;&lt;br /&gt;bir dosyanın belirkli byte büyüklüğünde n kadar sayıda dosyaya bölünmesi ve daha sonra başka bir programla bu dosyaların tekrar birleştirilmesi.&lt;br /&gt;&lt;br /&gt;/*******bol.c *******************/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;#define MAX_LEN 80&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;FILE *fs, *fd;&lt;br /&gt;char fsname[MAX_LEN];&lt;br /&gt;char fdname[MAX_LEN] = "dos0001.xxx";&lt;br /&gt;int chunk;&lt;br /&gt;long no_of_chars = 0L;&lt;br /&gt;int no_of_files = 0;&lt;br /&gt;int ch;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (argc != 3) {&lt;br /&gt;printf("bolunecek dosyanin ismini giriniz : ");&lt;br /&gt;gets(fsname);&lt;br /&gt;printf("kac byte'lik parcalara bolmek istiyorsunuz?");&lt;br /&gt;scanf("%d", &amp;chunk);&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;strcpy(fsname, argv[1]);&lt;br /&gt;chunk = atoi(argv[2]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;printf("%s dosyasi %d uzunlugunda dosyalara bolunecek!\n", fsname, chunk);&lt;br /&gt;&lt;br /&gt;fs = fopen(fsname, "rb");&lt;br /&gt;if (fs == NULL) {&lt;br /&gt;printf("%s dosyasi acilamiyor!\n", fsname);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;fd = NULL;&lt;br /&gt;&lt;br /&gt;while ((ch = fgetc(fs)) != EOF) {&lt;br /&gt;if (fd == NULL) {&lt;br /&gt;fd = fopen(fdname, "wb");&lt;br /&gt;if (fd == NULL) {&lt;br /&gt;printf(" %s dosyasi yaratilamiyor!\n", fdname);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;no_of_files++;&lt;br /&gt;printf("%s dosyasi yaratildi!\n", fdname);&lt;br /&gt;}&lt;br /&gt;fputc(ch, fd);&lt;br /&gt;no_of_chars++;&lt;br /&gt;if (no_of_chars % chunk == 0) {&lt;br /&gt;fclose(fd);&lt;br /&gt;printf("%s dosyasi kapatildi!\n", fdname);&lt;br /&gt;fd = NULL;&lt;br /&gt;sprintf(fdname, "dos%04d.xxx", no_of_files + 1);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;fclose(fs);&lt;br /&gt;if (no_of_chars % chunk != 0) {&lt;br /&gt;fclose(fd);&lt;br /&gt;printf("%s dosyasi kapatildi!\n", fdname);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;printf("%ld uzunlugunda %s dosyasi %d uzunlugunda %d adet dosyaya bolundu!\n",&lt;br /&gt;no_of_chars, fsname, chunk, no_of_files);&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*******bir.c *******************/&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;#define MAX_LEN 80&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;FILE *fs, *fd;&lt;br /&gt;char fdname[MAX_LEN];&lt;br /&gt;char fsname[MAX_LEN] = "dos0001.xxx";&lt;br /&gt;int ch;&lt;br /&gt;int no_of_files = 0;&lt;br /&gt;long no_of_chars = 0L;&lt;br /&gt;int k;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (argc != 2) {&lt;br /&gt;printf("birlestirilecek dosyanin ismini giriniz : ");&lt;br /&gt;gets(fdname);&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;strcpy(fdname, argv[1]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fd = fopen(fdname, "wb");&lt;br /&gt;if (fd == NULL) {&lt;br /&gt;printf("%s dosyasi yaratilamiyor!\n", fdname);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;printf("%s dosyasi yaratildi!\n", fdname);&lt;br /&gt;while (fs = fopen(fsname, "rb")) {&lt;br /&gt;no_of_files++;&lt;br /&gt;printf("%s dosyasi acildi!\n", fsname);&lt;br /&gt;&lt;br /&gt;while ((ch = fgetc(fs)) != EOF) {&lt;br /&gt;fputc(ch, fd);&lt;br /&gt;no_of_chars++;&lt;br /&gt;}&lt;br /&gt;fclose(fs);&lt;br /&gt;printf("%s dosyasi kapatildi!\n", fsname);&lt;br /&gt;sprintf(fsname, "dos%04d.xxx", no_of_files + 1);&lt;br /&gt;}&lt;br /&gt;fclose(fd);&lt;br /&gt;printf("%s dosyasi kapatildi!\n", fdname);&lt;br /&gt;printf("%d adet dosya %ld uzunlugunda %s ismli dosya altinda\ birlestirildi!\n", no_of_files, no_of_chars, fdname);&lt;br /&gt;&lt;br /&gt;for (k = 1; k &lt;= no_of_files; ++k) {&lt;br /&gt;sprintf(fsname, "dos%04d.xxx", k);&lt;br /&gt;remove(fsname);&lt;br /&gt;printf("%s dosyasi silindi!\n", fsname);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-1393956341295780379?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/1393956341295780379/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=1393956341295780379' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/1393956341295780379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/1393956341295780379'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2007/12/dosyalar.html' title='c de dosyalar'/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-7325094304249407288</id><published>2007-12-08T09:53:00.000-08:00</published><updated>2008-10-13T12:58:39.747-07:00</updated><title type='text'></title><content type='html'>DOSYALAR&lt;br /&gt;&lt;br /&gt;İkincil bellekte tanımlanmış bölgelere dosya denir. Her dosyanın bir ismi vardır. Ancak dosyaların isimlendirme kuralları sistemden sisteme göre değişebilmektedir. Dosya işlemleri tamamen işletim sisteminin kontrolü altındadır.&lt;br /&gt;&lt;br /&gt;İşletim sistemi de ayrı ayrı yazılmış fonksiyonların birbirlerini çağırması biçiminde çalışır. Örneğin komut satırında ismi yazılmış olan bir programın çalıştırılması birkaç sistem fonksiyonunun çağırılması ile yapılmaktadır. Komut satırından yazıyı alan, diskte bir dosyayı arayan, bir dosyayı RAM’e yükleyen, RAM’deki programı çalıştıran fonksiyonlar düzenli olarak çağırılmaktadır.&lt;br /&gt;&lt;br /&gt;İşletim sisteminin çalışması sırasında kendisinin de çağırdığı, sistem programcısının da dışarıdan çağırabildiği işletim sistemine ait fonksiyonlara sistem fonksiyonları denir. Bu tür fonksiyonlara Windows sisteminde API (Application Proggramming Interface) fonksiyonları, UNIX işletim sisteminde ise sistem çağırmaları (system calls) denir.&lt;br /&gt;Aslında bütün dosya işlemleri, hangi programlama dili ile çalışılırsa çalışılsın, işletim sisteminin sistem fonksiyonları tarafından yapılır. Sistem fonksiyonlarının isimleri ve parametrik yapıları sistemden sisteme değişebilmektedir.&lt;br /&gt;Dosyalara İlişkin Temel Kavramlar&lt;br /&gt;Dosyanın Açılması&lt;br /&gt;Bir dosya üzerinde işlem yapmadan önce dosya açılmalıdır. Dosya açabilmek için işletim sisteminin “dosya aç” isimli bir sistem fonksiyonu kullanılır. Dosyanın açılması sırasında dosya ile ilgili çeşitli ilk işlemler işletim sistemi tarafından yapılır.&lt;br /&gt;&lt;br /&gt;Bir dosya açıldığında, dosya bilgileri, ismine “Dosya Tablosu” (File table) denilen ve işletim sisteminin içerisinde bulunan bir tabloya yazılır. Dosya tablosunun biçimi sistemden siteme değişebilir. Örneğin tipik bir dosya tablosu şağıdaki gibi olabilir :&lt;br /&gt;&lt;br /&gt;Dosya tablosu (File table)&lt;br /&gt;Sıra No&lt;br /&gt;Dosya ismi&lt;br /&gt;Dosyanın Diskteki Yeri&lt;br /&gt;Dosyanın Özellikleri&lt;br /&gt;Diğerleri&lt;br /&gt;0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12&lt;br /&gt;AUTOEXEC.BAT&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sistem fonksiyonlarının da parametreleri ve geri dönüş değerleri vardır. "Dosya aç" sistem fonksiyonunun parametresi açılacak dosyanın ismidir.Fonksiyon, dosya bilgilerinin yazıldığı sıra numarası ile geri döner ki bu değere "file handle" denir. Bu handle değeri diğer dosya fonksiyonlarına parametre olarak geçirilir. Dosyanın açılması sırasında buna ek olarak başka önemli işlemler de yapılmaktadır.&lt;br /&gt;Dosyanın Kapatılması&lt;br /&gt;Dosyanın kapatılması açılması sırasında yapılan işlemlerin geri alınmasını sağlar. Örneğin dosyanın kapatılması sırasında, işletim sisteminin dosya tablosunda bulunan bu dosyaya ilişkin bilgiler silinir. Açılan her dosya kapatılmalıdır. Kapatılmaması çeşitli problemlere yol açabilir.&lt;br /&gt;Dosyaya Bilgi Yazılması ve Okunması&lt;br /&gt;İşletim sistemlerinin dosyaya n byte veri yazan ve dosyadan n byte veri okuyan sistem fonksiyonları vardır. Yazma ve okuma işlemleri bu fonksiyonlar kullanılarak yapılır.&lt;br /&gt;Dosya pozisyon göstericisi (file pointer)&lt;br /&gt;Bir dosya byte’lardan oluşur. Dosyadaki her bir byte’a 0’dan başlayarak artan sırada bir sayı karşılık getirilmiştir. Bu sayıya ilgili byte’ın ofset numarası denir. Dosya pozisyon göstericisi long türden bir sayıdır ve bir ofset değeri belirtir. Dosyaya yazan ve dosyadan okuma yapan fonksiyonlar bu yazma ve okuma işlemlerini her zaman dosya pozisyon göstericisinin gösterdiği yerden yaparlar. Örneğin dosya göstericisinin gösterdiği yer 100 olsun. Dosyadan 10 byte bilgi okumak için sistem fonksiyonu çağırıldığında, 100. ofsetden itibaren 10 byte bilgi okunur. İşletim sisteminin dosya göstericisini konumlandıran bir sistem fonksiyonu vardır. Dosya ilk açıldığında dosya göstericisi 0. ofsetdedir. Örneğin bir dosyanın 100. Ofsetinden itibaren 10 byte okunmak istenirse sırası ile şu işlemlerin yapılması gerekir:&lt;br /&gt;&lt;br /&gt;İlgili dosya açılır.&lt;br /&gt;Dosya pozisyon göstericisi 100. Offsete konumlandırılır.&lt;br /&gt;Dosyadan 10 byte okunur.&lt;br /&gt;Dosya kapatılır.&lt;br /&gt;&lt;br /&gt;C dilinde dosya işlemleri 2 biçimde yapılabilir :&lt;br /&gt;&lt;br /&gt;1. İşletim sisteminin sistem fonksiyonları doğrudan çağırılarak.&lt;br /&gt;2. Standart C fonksiyonları kullanılarak.&lt;br /&gt;&lt;br /&gt;Prototipleri stdio.h içerisinde olan standart dosya fonksiyonlarının hepsinin ismi f ile başlar.Tabi standart C fonksiyonları da işlemlerini yapabilmek için aslında işletim sisteminin sistem fonksiyonlarını çağırmaktadır. İşletim sisteminin sistem fonksiyonları taşınabilir değildir. İsimleri ve parametrik yapıları sistemden sisteme değişebilir. Bu yüzden standart C fonksiyonlarının kullanılması tavsiye edilir.&lt;br /&gt;fopen fonksiyonu&lt;br /&gt;FILE *fopen (const char *fname, const char *mode)&lt;br /&gt;&lt;br /&gt;Fonksiyonun 1. Parametresi açılacak dosyanın ismidir. 2. Parametre açış modudur. Dosya ismi path içerebilir. Dizin geçişleri için / de konulabilir. Açış modu şunlar olabilir :&lt;br /&gt;&lt;br /&gt;Mode&lt;br /&gt;Anlamı&lt;br /&gt;"w"&lt;br /&gt;Dosyayı yazmak için açar. Dosyadan okuma yapılamaz. Dosyanın mevcut olaması zorunlu değildir. Dosya mevcut değilse yaratılır. Dosya mevcut ise sıfırlanır.&lt;br /&gt;"w+"&lt;br /&gt;Dosyayı yazma ve okuma için açar. Dosyanın mevcut olaması zorunlu değildir. Dosya mevcut değilse yaratılır. Dosya mevcut ise sıfırlanır.&lt;br /&gt;"r"&lt;br /&gt;Dosyayı okuma için açar. Dosyaya yazma yapılamaz. Dosya mevcut değilse açılamaz.&lt;br /&gt;"r+"&lt;br /&gt;Dosyayı okuma ve yazma için açar. (Dosyanın pozisyon göstericisi dosyanın başındadır). Dosya mevcut değilse açılamaz.&lt;br /&gt;"a"&lt;br /&gt;Dosyayı sonuna ekleme için açar. Dosyadan okuma yapılamaz. Dosyanın mevcut olaması zorunlu değildir. Dosya mevcut değilse yaratılır.&lt;br /&gt;"a+"&lt;br /&gt;Dosyayı sonuna ekleme ve dosyadan okuma için açar. Dosyanın mevcut olaması zorunlu değildir. Dosya mevcut değilse yaratılır.&lt;br /&gt;&lt;br /&gt;Fonksiyonun geri dönüş değerine ilişkin FILE yapısı stdio.h içerisinde bildirilmiştir. Fonskiyonun geri dönüş değeri FILE yapısı türünden bir adrestir. Bu yapının elemanları standart değildir. Sistemden sisteme değişiklik gösterebilir. Zaten programcı bu yapının elemanlarına gereksinim duymaz. fopen fonksiyonu işletim sisteminin dosya aç sistem fonksiyonunu çağırarak dosyayı açar ve dosyaya ilişkin bazı bilgileri bu FILE yapısı içerisine yazarak bu yapının başlangıç adresini geri döndürür. Örneğin "file handle" değeri de bu yapının içerisindedir. Tabi fopen fonksiyonunun geri verdiği FILE türünden adres güvenli bir adrestir. Dosya çeşitli sebeplerden dolayı açılamayabilir. Bu durumda fopen NULL gösterici döndürür. Fonksiyonun geri dönüş değeri kesinlikle kontrol edilmelidir. Tipik bir kontrol işlemi aşağıdaki gibi yapılabilir:&lt;br /&gt;&lt;br /&gt;if ((f = fopen(“data”, “r”)) == NULL) {&lt;br /&gt;printf(“cannot open file”...\n);&lt;br /&gt;exit(1);}&lt;br /&gt;&lt;br /&gt;Dosya ismi dosyanın yeri hakkında bilgi (sürücü, path gibi) içerebilir. Dosya ismi string ile veriliyorsa path bilgisi verirken dikkatli olmak gerekecektir. path bilgisi \ karakteri içerebilir. string içinde \ karakterinin kullanılması, \ karakterininin onu izleyen karakterle birlikte önceden belirlenmiş ters bölü karakter sabiti olarak yorunlanmasına yol açabilecektir. Örneğin :&lt;br /&gt;&lt;br /&gt;fopen("C:\source\new.dat", "r");&lt;br /&gt;&lt;br /&gt;fonksiyon çağırımında derleyici \n karakterini "newline" karakteri olarak yorumlayacak \s karakterini ise "undefined" kabul edecektir. Bu problemden sakınmak \ yerine \\ kullanılmasıyla mümkün olur:&lt;br /&gt;&lt;br /&gt;fopen("C:\\source\\new.dat", "r");&lt;br /&gt;&lt;br /&gt;Append modları ("a", "a+") çok kullanılan modlar değildir. Dosyaya yazma durumunda "w" modu ile "a" modu arasında farklılık vardır. "w" modunda dosyada olan ofsetin üzerine yazılabilir. "a" modunda ise dosya içeriği korunarak sadece dosyanın sonuna yazma işlemi yapılabilir. Bir dosyanın hem okuma hem de yazma amacıyla açılması durumunda (yani açış modunu belirten stringde '+' karakterinin kullanılması durumunda dikkatli olmak gerekir. Okuma ve yazma işlemleri arasında mutlaka ya dosya pozisyon göstericisinin konumlandırılması (mesela fseek fonksiyonu ile) ya da dosyaya ilişken tampon bellek alanının (buffer) tazelenmesi gerekecektir.&lt;br /&gt;&lt;br /&gt;Bir dosyanın açılıp açılamayacağını aşağıdaki şekilde test edebiliri:&lt;br /&gt;&lt;br /&gt;Program komut satırından&lt;br /&gt;&lt;br /&gt;canopen dosya.dat&lt;br /&gt;&lt;br /&gt;şeklinde çalıştırıldığında ekrana "xxxxx dosyası açılabilir" ya da "xxxxx dosyası açılamaz" yazacaktır.&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;FILE *fp;&lt;br /&gt;&lt;br /&gt;if (argc != 2) {&lt;br /&gt;printf("usage: canopen filename\n");&lt;br /&gt;return 2;&lt;br /&gt;}&lt;br /&gt;if ((fp = fopen(argv[1], "r")) == NULL) {&lt;br /&gt;printf("%s dosyası açılamaz\n", argv[1]);&lt;br /&gt;return 1;&lt;br /&gt;}&lt;br /&gt;printf("%s dosyası açılabilir\n", argv[1]);&lt;br /&gt;fclose(fp);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;fclose fonksiyonu&lt;br /&gt;int fclose(FILE *stream);&lt;br /&gt;Bu fonksiyon açılmış olan bir dosyayı kapatır. Fonksiyon fopen ya da fropen fonksiyonundan elde edilen FILE yapısı türünden adresi parametre olarak alır ve açık olan dosyayı kapatır. Fonksiyonun geri dönüş değeri 0 ise dosya başarılı olarak kapatılmıştır. Fonksiyonun geri dönüş değeri EOF ise dosya kapatılamamıştır. EOF stdio.h içinde tanımlanan bir sembolik sabittir ve derleyicilerin çoğunda (-1) olarak tanımlanmıştır. Fonksiyonun başarısı ancak şüphe altında test edilmelidir. Normal şartlar altında dosyanın kapatılmaması için bir neden yoktur.&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *f;&lt;br /&gt;&lt;br /&gt;if ((f = fopen(“data”, “w”)) ==NULL) {&lt;br /&gt;printf(“cannot open file”...\n);&lt;br /&gt;exit(1);&lt;br /&gt;}&lt;br /&gt;fclose(f);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fgetc fonksiyonu&lt;br /&gt;int fgetc(FILE *f);&lt;br /&gt;&lt;br /&gt;İşletim sisteminin dolayısıyla C’nin yazma ve okuma yapan fonksiyonları yazılan ve okunan miktar kadar dosya göstericisini ilerletirler. fgetc fonksiyonu dosya göstericisinin gösterdiği yerdeki byte’ı okur ve geri dönüş değeri olarak verir. Fonksiyon başarısız olursa , stdio.h dosyası içerisinde sembolik sabit olarak tanımlanmış EOF değerine geri döner. Pek çok derleyici de EOF sembolik sabiti aşağıdaki gibi tanımlanmıştır.&lt;br /&gt;&lt;br /&gt;#define EOF (-1)&lt;br /&gt;&lt;br /&gt;fgetc fonksiyonunun geri dönüş değerini char türden bir değişkene atamak yanlış sonuç verebilir, bu konuda dikkatli olunmalı ve fonksiyonun geri dönüş değeri int türden bir değişkende saklanmalıdır.&lt;br /&gt;&lt;br /&gt;char ch;&lt;br /&gt;...&lt;br /&gt;ch = fgetc(fp);&lt;br /&gt;&lt;br /&gt;Yukarıda dosyadan okunan karakterin 255 numaralı ASCII karakteri (0x00FF) olduğunu düşünelim. Bu sayı char türden bir değişkene atandığında yüksek anlamlı byte'ı kaybedilecek ve ch değişkenine 0xFF değeri atanacaktır. Bu durumda ch değişkeni işaretli char türden olduğundan ch değişkeni içinde negatif bir sayının tutulduğu anlamı çıkar.&lt;br /&gt;&lt;br /&gt;if (ch == EOF)&lt;br /&gt;&lt;br /&gt;gibi bir karşılaştırma deyiminde, if parantezi içerisindeki karşılatırma işleminin yapılabilmesi için otomatik tür dönüşümü yapılır. Bu otomatik tür dönüşümünde işaretli int türüne çevrilecek ch değişkeni FF byte'ı ile beslenecektir. (negatif olduğu için). Bu durumda eşitlik karşılaştırması doğru netice verecek, yani dosyanın sonuna gelindiği (ya da başka nedenden dolayı okumanın yapılamadığı) yorumu yapılacaktır.&lt;br /&gt;&lt;br /&gt;Oysa ch değişkeni int türden olsaydı, ch değişkenine atanan değer 0x00FF olacak ve bu durumda karşılaştırma yapıldığında ch değişkeni ile EOF değerinin (0xFFFF) eşit olmadığı sonucuna varılacaktır.&lt;br /&gt;&lt;br /&gt;Bir dosyanın içeriğini ekrana yazdıran örnek program:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *f;&lt;br /&gt;char fname[MAX_PATH];&lt;br /&gt;int ch;&lt;br /&gt;&lt;br /&gt;printf(“Dosya ismi : “);&lt;br /&gt;gets(fname);&lt;br /&gt;if (f = fopen(fname, “r”)) == NULL) {&lt;br /&gt;printf(“cannot open file...\n”);&lt;br /&gt;exit(1);&lt;br /&gt;}&lt;br /&gt;while (ch = fgetc(f)) != EOF)&lt;br /&gt;putchar(ch);&lt;br /&gt;fclose(f);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;not : maximum path uzunluğu DOS’da 80 UNIX ve WINDOWS’da 256 karakteri geçemez.&lt;br /&gt;fputc Fonksiyonu&lt;br /&gt;int fputc(int ch, FILE *p);&lt;br /&gt;Bu fonksiyon dosya göstericisinin bulunduğu yere 1 byte bilgiyi yazar. Fonksiyonun 1. parametresi yazılacak karakter, 2. parametresi ise yazılacak dosyaya ilişkin FILE yapısı adresidir. Fonksiyonun geri dönüş değeri EOF ise işlem başarısızdır. Değilse fonksiyon yazılan karakter ile geri döner.&lt;br /&gt;&lt;br /&gt;fgetc ve fputc fonksiyonları kullanılarak bir dosyayı kopyalayan örnek program:&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;#define MAX_PATH 80&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *fsource, *fdest;&lt;br /&gt;char source[MAX_PATH], dest[MAX_PATH];&lt;br /&gt;int ch;&lt;br /&gt;&lt;br /&gt;printf(“kopyalanacak dosya : “);&lt;br /&gt;gets(source);&lt;br /&gt;printf(“kopya dosya : “);&lt;br /&gt;gets (dest);&lt;br /&gt;if ((fsource = fopen(source, “r”)) == NULL) {&lt;br /&gt;printf(“cannot open file...\n”);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;if ((fdest = fopen(dest, “w”)) == NULL) {&lt;br /&gt;printf(“cannot create file...\n”);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;while ((ch = fgetc(fsource)) != EOF)&lt;br /&gt;fputc(ch, fdest);&lt;br /&gt;fclose(fsource);&lt;br /&gt;fclose(fdest);&lt;br /&gt;printf(“1 file copied...\n”);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fprintf Fonksiyonu&lt;br /&gt;Bu fonksiyon tıpkı printf fonksiyonu gibidir. Ancak ilk parametresi yazma işleminin hangi dosyaya yapılacağını belirtir. Diğer parametreleri printf fonksiyonun da olduğu gibidir. Özetle printf fonksiyonu ekrana yazar ancak fprint fonksiyonu 1. parametre değişkeninde belirtilen dosyaya yazar.&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;#define MAX_PATH 80&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;FILE *f;&lt;br /&gt;int i;&lt;br /&gt;&lt;br /&gt;if ((f = fopen(“data”, “w”)) ==NULL) {&lt;br /&gt;printf(“cannot open file...\n");&lt;br /&gt;exit(1);&lt;br /&gt;}&lt;br /&gt;for (i = 0; i &lt; 10; ++i)fprintf(f, “sayi = %d\n”, i);fclose(f);return 0;}fgets fonksiyonuchar *fgets(char *buf, int n, FILE *f);Bu fonksiyon dosya göstericisinin gösterdiği yerden 1 satırlık bilgiyi okur. Fonksiyon dosyadan '\n' karakterini okuyunca onu da birinci parametresinde verilen adrese yazarak işlemini sonlandırır.Fonksiyonun 1. parametresi okunacak bilginin RAM'de yerleştirileceği yerin adresidir. 2. parametresi ise okunacak maksimum karakter sayısıdır. fgets en fazla n –1 karakteri okur. Okuduğu karakterlerin soonuna null karakteri ekler ve işlemini sonlandırır. Eğer satır üzerindeki karakter sayısı n- 1'den az ise tüm satırı okur ve işlemini sonlandırır. Örneğin bu parametreyi 10 olarak girdiğimizi düşünelim. Satır üzerinde 20 karakter olsun. Fonksiyon 9 karakteri okur, sonuna NULL karakteri ekler. Ancak satır üzerinde \n dahil olmak üzere 5 karakter olsaydı fonksiyon bu 5 karakteri de okuyarak sonuna da NULL karakter ekleyerek işlemini sonlandıracaktı. Bir döngü içerisinde fgets fonksiyonu sürekli olarak çağırılarak bütün dosya okunabilir.Fonksiyonun geri dönüş değeri, en az 1 karakter okunmuş ise 1. parametresi ile belirtilen adresin aynısı, hiç okunmamışsa NULL adresidir.Örnek : Bir dosyayı fgets fonksiyonu ile satır satır olarak ekrana yazan program:#define MAX_PATH 80#define MBUFSIZE 100int main(){FILE *f;char s[MAX_PATH];char buf[BUFSIZE];printf(“Dosya : “);gets(s);if ((f = fopen(s, “r”)) == NULL) {printf(“cannot open file...\n”);exit(1);}while (fgets(buf, BUFSIZE, f) != NULL)printf(“%s”, buf);fclose(f);return 0;}Text ve Binary Dosya KavramlarıDOS VE WINDOWS işletim sistemlerinde bir dosya text ve binary modda açılabilir. Varsayılan açış modu textdir. Yani dosyanın hangi modda açıldığı açık bir şekilde belirtilmezse dosyanın text modda açıldığı varsayılacaktır. Dosyayı binary modda açabilmek için açış modunun sonuna b eklemek gerekir. Örneğin :f = fopen(“data”, “r”) text moddaf = fopen(“data, “rb”) binary moddaDOS’da bir dosya type edildiğinde bir karakter aşağı satırın başında görünüyorsa bunu sağlamak için o karakterden önce CR (carriage return) ve LF (line feed) karakterlerinin bulunması gerekir. CR karakteri C’de ‘\r’ ile belirtilir. 13 numaralı ASCII karakteridir. LF karakteri C’de \n ile belirtilir. 10 numaralı ASCII karakteridir. Örneğin bir dosya type edildiğinde görüntüabşeklinde olsun. Dosyadaki durum a\r\nb şeklindedir. Oysa UNIX sistemlerinde aşağı satırın başına geçebilmek için sadece LF karakteri kullanılmaktadır. UNIX deabgörüntüsünün dosya karşılığıa\nb biçimindedir.DOS’da LF karakteri bulunulan satırın aşağısına geç CR karakteri ise bulunulan satırın başına geç anlamındadır. Örneğin DOS da bir bir dosyanın içeriği a\nb biçiminde ise dosya type edildiğindeabgörüntüsü elde edilir. Eğer dosyanın içeriği a\rb biçiminde ise dosya type edildiğindebgörüntüsü elde edilir.printf fonksiyonunda \n ekranda aşağı satırın başına geçme amacıyla kullanılır. Aslında biz printf fonksiyonunun 1. parametresi olan stringin içine \n yerleştirdiğimizde UNIX'de yalnızca \ni DOS'da ise \r ve\n ile bu geçiş sağlanır.Text dosyaları ile rahat çalışabilmek için dosyalar text ve binary olarak ikiye ayrılmıştır. Bir dosya text modunda açıldığında dosyaya \n karakteri yazılmak istendiğinde dosya fonksiyonları otomatik olarak \r ve \n karakterlerini dosyaya yazarlar. Benze r bir biçimde dosya text modda açılmışsa dosya göstericisi \r\n çiftini gösteriyorsa dosyadan yalnızca /n karakteri okunur. DOS işletim sisteminde text ve binary dosyalar arasındaki başka bir fark da, CTRL Z (26 numaralı ASCII karakterinin) dosyayı sonlandırdığının varsayılmasıdır. Oysa dosya binary modda açıldığında böyle bir varsayım yapılmaz.UNIX işletim sisteminde text modu ile binary mod arasında hiçbir fark yoktur. Yani UNIX işletim sisteminde dosyanın binary mod yerine text modunda açılmasının bir sakıncası olmayacaktır. Ancak DOS altında text dosyası olmayan bir dosyanın binary mod yerine text modunda açılmasının sakıncaları olabilir. Örneğin DOS altında bir exe dosyanın binary mod yerine text modda açıldığını düşünelim. Bu dosyada 10 numaralı ve 13 numaralı ASCII karakterleri yanyana bulunduğunda dosyadan yalnızca 1 byte okunacaktır. Aynı şekilde dosyadan 26 numaralı ASCII karakteri okunduğunda dosyadan artık başka bir okuma yapılamayacaktır. (Dosyanın sonuna gelindiği varsayılacaktır.)/*textmode.c programıDOS altında text modu ile binary mod arasındakifarkı gösteren bir program*/#include #include #include main(){FILE *fp;int k, ch;clrscr();fp = fopen("deneme", "w");if (fp == NULL) {printf("dosya açılamıyor\n");exit(EXIT_FAILURE);}/* dosyaya 5 tane \n karakteri yazdırılıyor */for (k = 0; k &lt; 5; ++k)fputc('\n', fp);fclose(fp);printf("\ndosya binary modda açılarak yazdırılıyor\n");fp = fopen("deneme", "rb");if (fp == NULL) {printf("dosya açılamıyor\n");exit(EXIT_FAILURE);}while ((ch = fgetc(fp)) != EOF)printf("%d ", ch);/* ekran çıktısı13 10 13 10 13 10 13 10 13 10*/fclose(fp);printf("\ndosya kapatıldı. Şimdi dosya text modunda açılarak yazdırılıyor .\n");fp = fopen("deneme", "r");if (fp == NULL) {printf("dosya açılamıyor\n");exit(EXIT_FAILURE);}while ((ch = fgetc(fp)) != EOF)printf("%d ", ch);/* ekran çıktısı10 10 10 10 10*/fclose(fp);/* simdi '\x1A' karakterinin text modunda dosyayı sonlandırması özelliğitest ediliyor */fp = fopen("deneme", "w");if (fp == NULL) {printf("dosya açılamıyor\n");exit(EXIT_FAILURE);}/* dosyaya 5 tane 'A' karakteri yazdırılıyor */for (k = 0; k &lt; 5; ++k)fputc('A', fp);/* dosyaya '\x1A' karakteri yazdırılıyor */fputc('\x1a', fp);/* dosyaya 10 tane 'A' karakteri yazdırılıyor. */for (k = 0; k &lt; 5; ++k)fputc('A', fp);fclose(fp);printf("\ndosya binary modda açılarak yazdırılıyor :\n");fp = fopen("deneme", "rb");if (fp == NULL) {printf("dosya açılamıyor\n");exit(EXIT_FAILURE);}while ((ch = fgetc(fp)) != EOF)printf("%d ", ch);/* ekran çıktısı65 65 65 65 65 26 65 65 65 65 65*/printf("\ndosya kapatıldı, Şimdi dosya text modunda açılarak yazdırılıyor\n");fp = fopen("deneme", "r");if (fp == NULL) {printf("dosya açılamıyor\n");exit(EXIT_FAILURE);}while ((ch = fgetc(fp)) != EOF)printf("%d ", ch);/* ekran çıktısı65 65 65 65 65 26 65 65 65 65 65*/fclose(fp);return 0;}EOF (END OF FILE) DURUMUDosyanın sonunda hiçbir özel karakter yoktur. İşletim sistemi dosyanın sonuna gelinip gelinmediğini dosyanın uzunluğuna bakarak anlayabilir. EOF durumu dosya pozisyon göstericisinin dosyada olmayan son karakteri göstermesi durumudur. EOF durumunda dosya pozisyon göstericisinin offset değeri dosya uzunluğu ile aynı değerdedir. EOF durumunda dosyadan okuma yapılmak istenirse dosya fonksiyonları başarısız olur. Ancak açış modu uygunsa dosyaya yazma yapılabilir ve bu durumda dosyaya ekleme yapılır.Daha önce söylendiği gibi C dilinde açılan bir dosya ile ilgili bilgiler FILE türünden bir yapı nesnesi içinde tutulur. Bu yapının her bir elemanı dosyanın bir özelliği hakkında bilgi vermektedir. C programcısı bu yapının elemanlarının değerleri ile doğrudan ilgilenmez, zira fopen fonksiyonunun geri dönüş değeri bu yapı nesnesini gösteren FILE yapısı türünden bir göstericidir ve C dilinin dosyalarla ilgili işlem yapan fonksiyonları çoğunlukla bu adresi parametre olarak alarak, istenilen dosyaya ulaşırlar.Söz konusu FILE yapısının elemanlarından biri de flag olarak kullanılan EOF indikatörüdür. (aslında int türden bir flag'in yalnızca belirli bir bitidir.) C dilinin dosyalarla ilgili işlem yapan bazı fonksiyonları EOF indikatörünün değerini değiştirirler. (set ya da clear ederler. Set edilmesi bu indikatöre 1 değerinin atanması clear edilmesi ise 0 değerinin atanmasıdır. Bu indikatörün set edilmesi demek dosya pozisyon göstericisinin dosyanın sonunu göstermesi demektir.Dosya açan fonksiyonlar FILE yapısındaki EOF indikatörünü sıfırlarlar. Bu fonksiyonlar dışında fseek fonksiyonu ve clearerr fonksiyonları da EOF indikatörünü sıfırlarlar. (clear ederler).fseek fonksiyonu :Bu fonksiyon dosya pozisyon göstericisini istenilen bir offsete konumlandırmak amacıyla kullanılır. Bu fonksiyonun kullanılmasıyla, açılmış bir dosyanın istenilen bir yerinden okuma yapmak ya da istenilen bir yerine yazmak mümkün hale gelir. Prototipi :int fseek(FILE *f, long offset, int origin);Fonksiyonun ikinci parametresi konumlandırma işleminin yapılacağı offset değeridir.Fonksiyonun 3. parametresi 0, 1, veya 2 olabilir. Bu değerler stdio.h dosyasında#define SEEK_SET 0#define SEEK_CUR 1#define SEEK_END 2biçiminde sembolik sabitlerle tanımlanmıştır ve fseek fonksiyonun çağırılmasında daha çok bu sembolik sabitler kullanılmaktadır.son parametre 0 ise, konumlandırma dosya başından itibaren yapılır. Bu durumda 2. parametre &gt;= 0 olmalıdır. Örneğin:&lt;br /&gt;&lt;br /&gt;fseek(f, 10L, 0);&lt;br /&gt;&lt;br /&gt;ile dosya göstericisi 10. offsete konumlandırılır. Ya da&lt;br /&gt;&lt;br /&gt;fseek(f, 0, 0);&lt;br /&gt;&lt;br /&gt;ile dosya göstericisi dosyanın başına konumlandırılır. Dosya pozisyon göstericisinin dosyanın başına konumlandırılması için rewind fonksiyonu da kullanılabilir:&lt;br /&gt;&lt;br /&gt;void rewind(FILE *fp);&lt;br /&gt;&lt;br /&gt;rewind(f);&lt;br /&gt;&lt;br /&gt;fonksiyonun 3. parametre değişkenine geçilen değer 1 ise (SEEK_CUR) , konumlandırma dosya göstericisinin en son bulunduğu yere göre yapılır. Bu durumda ikinci parametre pozitif ya da negatif değere sahip olabilir. Pozitif bir değer ileri, negatif bir değer geri anlamına gelecektir. Örneğin dosya göstericisi 10. offsette olsun.&lt;br /&gt;&lt;br /&gt;fseek(f, -1, SEEK_CUR);&lt;br /&gt;&lt;br /&gt;çağırması ile dosya göstericisi 9. offset'e konumlandırılır.&lt;br /&gt;&lt;br /&gt;fonksiyonun 3. parametre değişkenine geçilen değer 2 ise (SEEK_END), konumlandırma EOF durumundan itibaren yani dosya sonunu referans alınarak yapılır. Bu durumda ikinci parametre &lt;= 0 olmalıdır. Örneğin dosya göstericisini EOF durumuna çekmek için :fseek(f, 0, SEEK_END);çağırmasını yapmak gerekir. Ya da başka bir örnek:fseek(f, -1, SEEK_END);çağırması ile dosya göstericisi son karakterin offsetine çekilir. Fonksiyonun geri dönüş değeri işlemin başarısı hakkında bilgi verir. Geri dönüş değeri 0 ise işlem başarılıdır. Geri dönüş değeri 0 dışı bir değer ise işlem başarısızdır. Ancak problemli durumlarda geri dönüş değrinin test edilmesi tavsiye edilir.Yazma ve okuma işlemleri arasında dosya göstericisinin fseek fonksiyonu ile konumlandırılması gerekir.Konumlandırma gerekirse boş bir fseek çağırması ile yapılabilir. Örneğin dosyadan bir karakter okunup , bir sonraki karaktere bu karakterin 1 fazlasını yazacak olalım.ch = fgetc(f);fputc(ch + 1, f);işlemi hatalıdır. Yazmadan okumaya, okumadan yazmaya geçişte dosya göstericisi konumlandırılmalıdır.feof fonskiyonu :bu fonksiyon dosya göstericisinin EOF durumunda olup olmadığını (EOF indikatörünün set edilip edilmediğini) test etmek amacıyla kullanılır. Prototipi:int feof(FILE *f);Eğer dosya göstericisi dosya sonunda ise (EOF indikatörü set edilmişse) fonksiyon 0 dışı bir değere , değilse (EOF indikatörü set edilmemişse) 0 değeri ile geri döner.Ancak feof fonksiyonunun 0 dışı bir değere geri dönebilmesi için dosya göstericisinin dosyanın sonunda olmasının yanı sıra en son yapılan okuma işleminin de başarısız olması gerekir. daha önce söylendiği gibi bazı fonksiyonlar (fopen, fseek, rewind, clearerr) EOF indikatorünü clear ederler, yani EOF indikatörünün 0 değerinde olması (clear edilmiş olması) dosyanın sonunda olunmadığının bir garantisi değildir.fread ve fwrite fonksiyonlarıBu iki fonksiyon C dilinde en çok kullanılan dosya fonksiyonlarıdır. Genel olarak dosya ile RAM arasında transfer yaparlar. Her iki fonskiyonun da prototipleri aynıdır.size_t fread(void *adr, size_t size, size_t n, FILE *);size_t fwrite (const void *adr, size_t size, size_t n, FILE *);size_t türünün derleyiciyi yazanlar tarafından unsigned int ya da unsigned long türünün typedef edilmiş yeni ismi olduğunu hatırlayalım.fread fonskiyonu dosya pozisyon göstericisinin gösterdiği yerden, 2. ve 3. parametresine kopyalanan değerlerin çarpımı kadar byte'ı , RAM'de 1. parametresinin gösterdiği adresten başlayarak kopyalar. Geleneksel olarak fonksiyonun 2. parametresi veri yapısının bir elemanının uzunluğunu, 3. parametresi ile parça sayısı biçiminde girilir.Bu fonksiyonlar sayesinde diziler ve yapılar tek hamlede dosyaya transfer edilebilirler. Örneğin 10 elemanlı bir dizi aşağıdaki gibi tek hamlede dosyaya yazılabilir.int a[5] = {3, 4, 5, 7, 8};fwrite (a, sizeof(int), 5, f);Yukarıdaki örnekte, dizi ismi olan a int türden bir adres bilgisi olduğu için, fwrite fonksiyonuna 1. arguman olarak gönderilebilir. FILE türünden f göstericisi ile ilişkilendirilen dosyaya RAM'deki a adresinden toplam sizeof(int) * 5 byte yazılmaktadır.Ancak tabi fwrite fonskiyonu sayıları bellekteki görüntüsü ile dosyaya yazar. (yani fprintf fonksiyonu gibi formatlı yazmaz.) Örneğin:int i = 1535;fwrite(&amp;i, sizeof(int), 1, f);Burada dosya type edilirse 2 byte uzunluğunda rasgele karakterler görünür. Çünkü DOS'da int türü 2 byte uzunluğundadır. Bizim gördüğümüz ise 1525'in rasgele olan bytelarıdır. Bilgileri ASCII karşılıkları ile dosyaya yazmak için fprintf fonksiyonu kullanılabilir..fread ve fwrite fonksiyonları bellekteki bilgileri transfer ettiğine göre dosyaların da binary modda açılmış olması uygun olacaktır.#include #include int main(){FILE *f;int i;int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int b[10];if ((f = fopen("data", w+b")) == NULL) {printf("cannot open file...\n");exit(EXIT_FAILURE);}fwrite (a, sizeof(int), 10, f);fseek(f, 0, SEEK_SET);fread(b, sizeof(int), 10, f);for (i = 0; i &lt; 10; ++i)printf("%d\n", b[i]);}fread ve fwrite fonksiyonlarının geri dönüş değerleri 3. parametresi ile belirtilen okunan ya da yazılan parça sayısıdır. Örneğinn = fread(a, sizeof(int), 10, f);ifadesinde fonksiyon bütün sayıları okuyabildiyse 10 sayısına geri döner. Eğer dosyadaki kalan byte sayısı okunmak istenen sayıdan az ise fonksiyon bütün byte'ları okur ve geri dönüş değeri okunan byte sayısı 2. parametresi ile belirtilen sayı olur. Örneğin DOS altında çalışıyor olalım. Dosyada 10 byte bilgi kalmış olsun.n = fread(a, sizeof(int), 10, f);ile fonksiyon 5 sayısına geri dönecektir.Aşağıdaki iki ifadeyi inceleyelim:fread(str, 100, 1, f);fread(str, 1, 100, f);her iki fonksiyon çağırma ifadesi de RAM'deki str adresine FILE türünden f göstericisi ile ilişkilendirilen dosyadan 100 byte okumak amacıyla kullanılabilir. Ancak birinci çağırmada geri dönüş değeri ya 0 ya 1 olabilecekken, ikinci fonksiyon çağırmasında geri dönüş değeri 0 100(dahil) herhangi bir değer olabilecektir.Blok blok kopyalama işlemiAşağıdaki örnekte bir grup byte fread fonskiyonu ile bir dosyadan okunmuş ve fwrite fonksiyonu ile diğer bir dosyaya yazılmıştır.#define BLOCK_SIZE 1024#define MAX_PATH 80int main(){FILE *fs, *fd;char s[MAX_PATH], d[MAX_PATH];unsigned n;printf("kaynak dosya : ");gets(s);printf("amaç dosya : ");gets(d);if ((fs = fopen(s, "rb")) == NULL) {printf("cannot open file ...\n");exit(EXIT_FAILURE);}if ((fd = fopen(d, "wb")) == NULL) {printf("cannot open file ...\n");fclose(fs);exit(EXIT_FAILURE);}while ((n = fread(buf, 1, BLOCK_SIZE, fs)) &gt; 0)&lt;br /&gt;fwrite(buf, 1, n, fd);&lt;br /&gt;fclose(fs);&lt;br /&gt;fclose(fd);&lt;br /&gt;printf("1 file copied...\n");&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;remove fonksiyonu&lt;br /&gt;&lt;br /&gt;Bu fonksiyon bir dosyayı silmek için kullanılır. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;int remove (const char *filename);&lt;br /&gt;&lt;br /&gt;şeklindedir. Fonksiyona arguman olarak silinecek dosyanın ismi gönderilir. Fonksiyonun geri dönüş değeri, dosyanın başarılı bir şekilde silinebilmesi durumunda 0 aksi halde (yani dosya silinememişse) 0 dışı bir değerdir. Açık olan bir dosyanın silinmesi "implementation depended" (derleyiciye bağlı) olduğundan, yazılan kodun taşınabilirliği açısından, silinecek bir dosya açık ise önce kapatılmalıdır.&lt;br /&gt;&lt;br /&gt;rename fonksiyonu&lt;br /&gt;&lt;br /&gt;Bu fonksiyon bir dosyanın ismini değiştirmek için kullanılır. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;int rename (const char *old, const char *new);&lt;br /&gt;&lt;br /&gt;şeklindedir.&lt;br /&gt;&lt;br /&gt;Fonksiyona 1. arguman olarak dosyanın eski ismi ikinci arguman olarak ise dosyanın yeni ismi gönderilmelidir. Fonksiyonun geri dönüş değeri, isim değiştirmen işleminin başarılı olması durumunda 0, aksi halde (dosyanın ismi değiştirilemiyorsa 0 dışı bir değerdir. (Örneğin açık olan bir dosyanın isminin değiştirilmeye çalışılması başarılı olamayacağından fonksiyon bu durumda 0 dışı bir değere geri dönecektir.)&lt;br /&gt;&lt;br /&gt;tmpfile fonksiyonu&lt;br /&gt;&lt;br /&gt;Fonksiyon geçici bir dosya açmak amacıyla kullanılır. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;FILE * tmpfile(void);&lt;br /&gt;&lt;br /&gt;tmpfile fonksiyonu açtığı geçici dosyayı "wb" modunda açar. Açılan dosya fclose fonksiyonu ile kapatıldığında ya da (kapatılmazsa), program sona erdiğinde otomatik olarak silinecektir. Fonksiyonu geri dönüş değeri, açılan geçici dosya ile ilişki kurulmasına yarayacak, FILE yapısı türünden bir adrestir. Herhangi bir nedenle dosya geçici dosya açılamıyorsa fonksiyon NULL adresine geri dönecektir.&lt;br /&gt;&lt;br /&gt;tmpnam fonksiyonu&lt;br /&gt;&lt;br /&gt;Geçici olarak kullanılacak bir dosya için bir isim üretilmesi amacıyla kullanılır. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;char *tmpnam(char *s);&lt;br /&gt;&lt;br /&gt;şeklindedir. Fonksiyon ürettiği dosya ismini kendisine gönderilen char türden adrese yerleştirir. Eğer fonksiyona arguman olarak NULL adresi gönderilirse, fonksiyon üretilen dosya ismini statik bir dizi içinde tutarak bu dizinin adresiyle geri dönecektir. Fonksiyona char türden bir dizinin adresi gönderildiğinde bu dizinin boyutu ne kadar olmalıdır. Başka bir deyişle tmpnam fonksiyonu kaç karakter uzunluğunda bir dosya ismi üretecektir. İşte bu değer stdio.h dosyası içinde tanımlanan L_tmpnam sembolik sabitiyle belirtilmektedir.&lt;br /&gt;tmpnam fonksiyonunun ürettiği dosya isminin daha önce kullanılmayan bir dosya ismi olması garanti altına alınmıştır. Yani üretilen dosya ismi tektir. (unique file name) Bir programda daha sonra silmek üzere bir dosya açacağımızı ve bu dosyaya birtakım bilgileri yazacağımız düşünelim. Bu durumda dosyayı yazma modunda açacağımıza göre, açacağımız dosyaya olan bir dosyanın ismini veremeyiz. Eğer verirsek , var olan dosya sıfırlanacağı için bu dosyayı kaybederiz. Bu riske girmemek için, geçici olarak kullanılacak dosya tmpfiel fonksiyonu kullanılarak açılmalıdır. Ancak tmpfile fonksiyonunun kullanılması durumunda, açılan dosya kalıcı hale getirilemez. Yani herhangi bir nedenden dolayı geçici dosyanın silinmemesini istersek, (dosyayı kalıcı hale getirmek istersek) dosyayı fopen fonksiyonuyla açmalıyız. İşte bu durumda geçici dosyayı başka bir dosyayı riske etmemek için tmpnam fonksiyonunun ürettiği isim ile açmalıyız. Peki tmpnam fonksiyonuyla en fazla kaç tane "unique file name " üretebiliriz. İşte bu sayı stdio.h içinde tanımlanan TMP_MAX sembolik sabiti ile belirlenmiştir.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C dilinde bazı giriş ve çıkış birimleri(klavye, ekran gibi) doğrudan bir dosya gibi ele alınırlar. C standartları herhangi bir giriş çıkış birimini "stream" olarak isimlendirmektedir. Bir stream bir dosya olabileceği gibi, dosya olarak ele alınan bir giriş çıkış birimi de olabilir. Örneğin küçük programlar genellikle girdilerini genellikle tek bir stream,den alıp (mesela klavye) çıktılarını da tek bir streame (mesela ekran) iletirler.&lt;br /&gt;&lt;br /&gt;freopen fonksiyonu&lt;br /&gt;&lt;br /&gt;freopen fonksiyonu daha önce açılmış bir dosyayı, fropen fonksiyonu ile açılan dosyaya yönlendirir. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;FILE *freopen(const char *filename, const char *mode, FILE *stream);&lt;br /&gt;şeklindedir.&lt;br /&gt;&lt;br /&gt;Uygulamalarda daha çok standart dosyaların (stdin, stdout, stderr) başka dosyalara yönlendirilmesinde kullanılır. Örneğin bir programın çıktılarının data.dat isimli dosyaya yazılmasını istersek :&lt;br /&gt;&lt;br /&gt;if (freopen("data.dat", "w", stdout) == NULL) {&lt;br /&gt;printf("data.dat dosyası açılamıyor\n");&lt;br /&gt;exit(EXIT_FAILURE);}&lt;br /&gt;&lt;br /&gt;yukarıdaki fonksiyon çağırımıyla stdout dosyasının yönlendirildiği dosya kapatılarak (bu yönlendirme işlemi komut satırından yapılmış olabileceği gibi, freopen fonksiyonunun daha önceki çağırımı ile de yapılmış olabilir.) stdout dosyasının data.dat dosyasına yönlendirilmesi sağlanır.&lt;br /&gt;&lt;br /&gt;freopen fonksiyonunun geri dönüş değeri fonksiyona gönderilen üçüncü arguman olan FILE yapısı türünden göstericidir. freopen dosyası yönlendirmenin yapılacağı dosyayı açamazsa NULL adresine geri döner. Eğer yönlendirmenin yapıldığı eski dosya kapatılamıyorsa, freopen fonksiyonu bu durumda bir işaret vermez.&lt;br /&gt;&lt;br /&gt;dosya buffer fonksiyonları&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;İkincil belleklerle (disket, hard disk vs.) yapılan işlemler RAM'de yapılan işlemlere göre çok yavaştır. Bu yüzden bir dosyadan bir karakterin okunması ya da bir dosyaya bir karakterin yazılması durumunda her defasında dosyaya doğrudan ulaşmak verimli bir yöntem değildir.&lt;br /&gt;İşlemin performansı bufferlama yoluyla artırılmaktadır. Bir dosyaya yazılacak data ilk önce bellekteki bir buffer alanında saklanır. Bu buffer alanı dolduğunda ya da yazılmanın yapılacağı dosya kapatıldığında bufferdaki data alanında ne varsa dosyaya yazılır. Buna bufferin boşaltılması (to flush the buffer) denir.&lt;br /&gt;Giriş dosyaları da benzer şekilde bufferlanabilir. Giriş biriminden alınan data (örneğin klavyeden) önce buffera yazılır.&lt;br /&gt;dosyaların bufferlaması erimlilikte çok büyük bir artışa neden olur. Çünkü bufferdan (RAM'den) bir karakter okunması ya da buffera bir karakter yazılması ihmal edilecek kadar küçük bir zaman içinde yapılır. Buffer ile dosya arasındaki transfer şüphesiz yine vakit alacaktır ama bir defalık blok transferi, küçük küçük transferlerin toplamından çok daha kısa zaman alacaktır.&lt;br /&gt;&lt;br /&gt;stdio.h başlık dosyası içinde prototipi bildirimi yapılan ve dosyalarla ilgili işlem yapan fonksiyonlar tamponlamayı otomatik olarak gerçekleştirirler. Yani dosyaların tamponlanması için bizim birşey yapmamıza gerek kalmadan bu iş geri planda bize sezdirilmeden yapılmaktadır. Ama bazı durumlarda tamponlama konusunda programcı belirleyici durumda olmak isteyebilir. İşte bu durumlarda programcı dosya tamponlama fonksiyonlarını (fflush, setbuf, setvbuf) kullanacaktır:&lt;br /&gt;&lt;br /&gt;fflush fonksiyonu&lt;br /&gt;&lt;br /&gt;Bir program çıktısını bir dosyaya yazarken (örneğin stdout dosyasına) yazılan dosya ilk önce RAM'deki tamponlama alanına gider. Dosya kapatıldığında ya da tamponlama alanı dolduğunda, tamponlama alanı boşaltılarak dosyaya yazılır. fflush fonksiyonunun kullanılmasıyla, dosyanın kapatılması ya da tamponlama alanının dolması beklenmeksizin, tamponlama alanı boşatılarak dosyaya yazılır. Bu işlem istenilen sıklıkta yapılabilir. Fonksiyonun prototipi :&lt;br /&gt;&lt;br /&gt;int fflush (FILE *stream);&lt;br /&gt;&lt;br /&gt;şeklindedir.&lt;br /&gt;&lt;br /&gt;fflush(fp);&lt;br /&gt;&lt;br /&gt;çağırımı ile FILE yapısı türünden fp göstericisi ile ilişkilendirilen dosyanın tamponlama alanı (buffer) boşaltılır. Eğer fflush fonksiyonuna NULL adresi gönderilirse, açık olan bütün dosyaların tamponlama alanları boşaltılacaktır.&lt;br /&gt;&lt;br /&gt;Tamponlama alanının boşaltılması işlemi başarılı olursa fflush fonksiyonu 0 değerine geri dönecek aksi halde EOF değerine geri dönecektir.&lt;br /&gt;&lt;br /&gt;setvbuf fonksiyonu&lt;br /&gt;&lt;br /&gt;setvbuf fonksiyonu bir dosyanın tamponlanma şeklinin değiştirilmesi ve tampon alanının yerinin ve boyutunun değiştirilmesi amacıyla kullanılır. Fonksiyonun prototipi aşağıdaki şekildedir :&lt;br /&gt;&lt;br /&gt;int setvbuf(FILE *stream, char *buf, int mode, size_t size);&lt;br /&gt;&lt;br /&gt;Fonksiyona gönderilen üçüncü arguman tamponlama şeklini belirler. Üçüncü argumanın değeri stdio.h başlık dosyası içinde tanımlanan sembolik sabitlerle belirlenir.&lt;br /&gt;&lt;br /&gt;_IOFBF (full buffering - tam tamponlama)&lt;br /&gt;data dosyaya tamponlama alanı dolduğunda yazılır. Ya da giriş tamponlaması söz konusu ise dosyadan okuma tamponlama alanı boş olduğu zaman yapılır.&lt;br /&gt;&lt;br /&gt;_IOLBF (line buffering - satır tamponlaması)&lt;br /&gt;Tamponlama alanı ile dosya arasındaki okuma ya da yazma işlemi satır satır yapılır.&lt;br /&gt;&lt;br /&gt;_IONBF (no buffering - tamponlama yok)&lt;br /&gt;Dosyadan okuma ya da soyaya yazma tamponlama olmadan doğrudan yapılır.&lt;br /&gt;&lt;br /&gt;setvbuf fonksiyonuna gönderilen ikinci arguman RAM'de tamponlamanın yapılacağı bloğun başlangıç adresidir. Tamponlamanın yapılacağı alan statik ya da dinamik ömürlü olabileceği gibi, dinamik bellek fonksiyonlarıyla da tahsis edilebilir.&lt;br /&gt;Fonksiyona gönderilen son arguman tamponlama alanında tutulacak byteların sayısıdır.&lt;br /&gt;&lt;br /&gt;setvbuf fonksiyonu dosya açıldıktan sonra, fakat dosya üzerinde herhangi biri işlem yapılmadan önce çağırılmalıdır. Fonksiyonun başarılı olması durumunda fonksiyon 0 değerine geri dönecektir. Fonksiyona gönderilen üçüncü argumanın geçersiz olması durumunda ya da fonksiyonun ilgili tamponlamayı yapamaması durumunda, geri dönüş değeri 0 dışı bir değer olacaktır.&lt;br /&gt;Fonksiyona gönderilen buffer alanının geçerliliğinin bitmesinden önce (ömrünün tamamlanmasından önce) dosya kapatılmamalıdır.&lt;br /&gt;&lt;br /&gt;dosya işlemleri ile ilgili örnek uygulamalar:&lt;br /&gt;&lt;br /&gt;Uygulama 1 : Dosya üzerinde sıralı veri tabanı tutulması&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;/* symbolic constants */&lt;br /&gt;#define MAX_PATH 80&lt;br /&gt;#define ADDREC 1&lt;br /&gt;#define LISTREC 2&lt;br /&gt;#define FINDREC 3&lt;br /&gt;#define DELREC 4&lt;br /&gt;#define EDITREC 5&lt;br /&gt;#define PACKRECS 6&lt;br /&gt;#define SORTREC 7&lt;br /&gt;#define EXITPROG 8&lt;br /&gt;#define DELETED 0&lt;br /&gt;#define NORMALREC 1&lt;br /&gt;#define INVALID 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* structure declarations */&lt;br /&gt;&lt;br /&gt;typedef struct _PERSON {&lt;br /&gt;char name[30];&lt;br /&gt;int no;&lt;br /&gt;int delflag;&lt;br /&gt;} PERSON;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* function prototypes */&lt;br /&gt;&lt;br /&gt;int GetOption(void);&lt;br /&gt;void AddRec(void);&lt;br /&gt;void ListRec(void);&lt;br /&gt;void FindRec(void);&lt;br /&gt;void DelRec(void);&lt;br /&gt;void EditRec(void);&lt;br /&gt;void SortRec(void);&lt;br /&gt;void Pack(void);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* global variables */&lt;br /&gt;&lt;br /&gt;FILE *f;&lt;br /&gt;char fname[MAX_PATH];&lt;br /&gt;&lt;br /&gt;/* function definitions */&lt;br /&gt;&lt;br /&gt;void AddRec(void)&lt;br /&gt;{&lt;br /&gt;PERSON per;&lt;br /&gt;&lt;br /&gt;printf("Adı soyadı : ");&lt;br /&gt;fflush(stdin);&lt;br /&gt;gets(per.name);&lt;br /&gt;printf("No : ");&lt;br /&gt;scanf("%d", &amp;per.no);&lt;br /&gt;per.delflag = NORMALREC;&lt;br /&gt;fseek(f, 0, SEEK_END);&lt;br /&gt;fwrite(&amp;per, sizeof(PERSON), 1, f);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void FindRec(void)&lt;br /&gt;{&lt;br /&gt;PERSON per;&lt;br /&gt;char name[30];&lt;br /&gt;&lt;br /&gt;printf("lütfen kayıt ismini giriniz :");&lt;br /&gt;fflush(stdin);&lt;br /&gt;gets(name);&lt;br /&gt;fseek(f, 0, SEEK_SET);&lt;br /&gt;while (fread(&amp;per, sizeof(PERSON), 1, f) &gt; 0) {&lt;br /&gt;if (per.delflag != NORMALREC)&lt;br /&gt;continue;&lt;br /&gt;if (!stricmp(per.name, name)) {&lt;br /&gt;printf("\n%s %d\n\n", per.name, per.no);&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;printf("\nKayıt bulunamadı...\n\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void ListRec(void)&lt;br /&gt;{&lt;br /&gt;PERSON per;&lt;br /&gt;&lt;br /&gt;putchar('\n');&lt;br /&gt;fseek(f, 0L, SEEK_SET);&lt;br /&gt;while (fread(&amp;per, sizeof(PERSON), 1, f) &gt; 0) {&lt;br /&gt;printf("\n%20s %5d", per.name, per.no);&lt;br /&gt;if (per.delflag == DELETED)&lt;br /&gt;printf("\tDELETED");&lt;br /&gt;}&lt;br /&gt;putchar('\n\n');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void DelRec(void)&lt;br /&gt;{&lt;br /&gt;char name[30];&lt;br /&gt;PERSON per;&lt;br /&gt;&lt;br /&gt;printf("Silinecek kayıtın adı ve soyadı : ");&lt;br /&gt;fflush(stdin);&lt;br /&gt;gets(name);&lt;br /&gt;fseek(f, 0, SEEK_SET);&lt;br /&gt;while (fread(&amp;per, sizeof(PERSON), 1, f) &gt; 0) {&lt;br /&gt;if (!stricmp(per.name, name)) {&lt;br /&gt;per.delflag = DELETED;&lt;br /&gt;fseek(f, -(long)sizeof(PERSON), 1);&lt;br /&gt;fwrite(&amp;per, sizeof(PERSON), 1, f);&lt;br /&gt;printf("Record deleted!..\n");&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;printf("silinecek kayıt bulunamadı");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void EditRec(void)&lt;br /&gt;{&lt;br /&gt;char name[30];&lt;br /&gt;PERSON per;&lt;br /&gt;&lt;br /&gt;printf("Değiştirilecek kayıtın adı ve soyadı : ");&lt;br /&gt;fflush(stdin);&lt;br /&gt;gets(name);&lt;br /&gt;fseek(f, 0, SEEK_SET);&lt;br /&gt;while (fread(&amp;per, sizeof(PERSON), 1, f) &gt; 0) {&lt;br /&gt;if (per.delflag == NORMALREC &amp;&amp; !stricmp(per.name, name)) {&lt;br /&gt;printf("Adı soyadı : ");&lt;br /&gt;fflush(stdin);&lt;br /&gt;gets(per.name);&lt;br /&gt;printf("No : ");&lt;br /&gt;scanf("%d", &amp;per.no);&lt;br /&gt;fseek(f, -(long)sizeof(PERSON), 1);&lt;br /&gt;fwrite(&amp;per, sizeof(PERSON), 1, f);&lt;br /&gt;printf("Record updated!..\n");&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;printf("değiştirilecek kayıt bulunamadı\n");&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int GetOption(void)&lt;br /&gt;{&lt;br /&gt;int option;&lt;br /&gt;&lt;br /&gt;printf("\n1) Kayıt Ekle\n");&lt;br /&gt;printf("2) Kayıt Listele\n");&lt;br /&gt;printf("3) Kayıt Bul\n");&lt;br /&gt;printf("4) Kayıt Sil\n");&lt;br /&gt;printf("5) Kayıt değiştir\n");&lt;br /&gt;printf("6) Pack\n");&lt;br /&gt;printf("7) Sırala\n");&lt;br /&gt;printf("8) Çık\n");&lt;br /&gt;printf("\nSeçiminiz :");&lt;br /&gt;scanf("%d", &amp;option);&lt;br /&gt;if (option &lt;&gt; 8)&lt;br /&gt;return INVALID;&lt;br /&gt;return option;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void SortRec(void)&lt;br /&gt;{&lt;br /&gt;PERSON per[2], tmp;&lt;br /&gt;int i, count, chgFlag;&lt;br /&gt;&lt;br /&gt;fseek(f, 0, SEEK_END);&lt;br /&gt;count = ftell(f) / sizeof(PERSON);&lt;br /&gt;&lt;br /&gt;do {&lt;br /&gt;chgFlag = 0;&lt;br /&gt;for (i = 0; i &lt; count - 1; ++i) {fseek(f, (long)i * sizeof(PERSON), SEEK_SET);if (fread(per, sizeof(PERSON), 2, f) != 2) {printf("cannot read from the file!..\n");exit(EXIT_FAILURE);}if (per[0].no &gt; per[1].no) {&lt;br /&gt;chgFlag = 1;&lt;br /&gt;&lt;br /&gt;tmp = per[0];&lt;br /&gt;per[0] = per[1];&lt;br /&gt;per[1] = tmp;&lt;br /&gt;&lt;br /&gt;fseek(f, (long)i * sizeof(PERSON), SEEK_SET);&lt;br /&gt;if (fwrite(per, sizeof(PERSON), 2, f) != 2) {&lt;br /&gt;printf("cannot read from the file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} while (chgFlag);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void Pack(void)&lt;br /&gt;{&lt;br /&gt;FILE *fnew;&lt;br /&gt;PERSON per;&lt;br /&gt;&lt;br /&gt;if ((fnew = fopen("temp", "wb")) == NULL) {&lt;br /&gt;printf("cannot create temporary file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;fseek(f, 0l, SEEK_SET);&lt;br /&gt;while (fread(&amp;per, sizeof(PERSON), 1, f) &gt; 0) {&lt;br /&gt;if (per.delflag == NORMALREC)&lt;br /&gt;fwrite(&amp;per, sizeof(PERSON), 1, fnew);&lt;br /&gt;}&lt;br /&gt;fclose(fnew);&lt;br /&gt;fclose(f);&lt;br /&gt;if (unlink(fname)) {&lt;br /&gt;printf("Fatal Error : Cannot open database file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;if (rename("temp", fname)) {&lt;br /&gt;printf("fatal Error: cannot delete database file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;if ((f = fopen(fname, "r+b")) == NULL) {&lt;br /&gt;printf("Fatal Error : Cannot open database file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;printf("Pack operation succesfully completed!..\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;char dfname[MAX_PATH];&lt;br /&gt;int option;&lt;br /&gt;&lt;br /&gt;printf("Data File : ");&lt;br /&gt;gets(dfname);&lt;br /&gt;if ((f = fopen(dfname, "r+b")) == NULL)&lt;br /&gt;if ((f = fopen(dfname, "w+b")) == NULL) {&lt;br /&gt;printf("Cannot open database file!..\n");&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;strcpy(fname, dfname);&lt;br /&gt;for (;;) {&lt;br /&gt;option = GetOption();&lt;br /&gt;switch (option) {&lt;br /&gt;case ADDREC : AddRec(); break;&lt;br /&gt;case LISTREC : ListRec(); break;&lt;br /&gt;case FINDREC : FindRec(); break;&lt;br /&gt;case DELREC : DelRec(); break;&lt;br /&gt;case EDITREC : EditRec(); break;&lt;br /&gt;case PACKRECS : Pack(); break;&lt;br /&gt;case SORTREC : SortRec(); break;&lt;br /&gt;case EXITPROG : goto EXIT;&lt;br /&gt;case INVALID : printf("Geçersiz Seçenek!..\n");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;EXIT:&lt;br /&gt;fclose(f);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Uygulama 2: developer's back up programı (G. Aslan)&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;#define GOOD 0&lt;br /&gt;#define FAIL (-1) &lt;br /&gt;&lt;br /&gt;#define FBUFSIZ (63*512) /* Buffer size */&lt;br /&gt;&lt;br /&gt;char *Buffer, *in_buf, *out_buf;&lt;br /&gt;char CmpFile[128], OutFile[128];&lt;br /&gt;&lt;br /&gt;int filecmp(FILE *fi, FILE *fo)&lt;br /&gt;{&lt;br /&gt;int c1, c2;&lt;br /&gt;long l1, l2;&lt;br /&gt;&lt;br /&gt;l1 = filelength(fileno(fi));&lt;br /&gt;l2 = filelength(fileno(fo));&lt;br /&gt;if (l1 != l2)&lt;br /&gt;return FAIL;&lt;br /&gt;&lt;br /&gt;rewind(fi);&lt;br /&gt;rewind(fo); &lt;br /&gt;for (;;) {&lt;br /&gt;c1 = getc(fi);&lt;br /&gt;c2 = getc(fo); &lt;br /&gt;&lt;br /&gt;if (c1 != c2) {&lt;br /&gt;return FAIL; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;if (c1 == EOF)&lt;br /&gt;break; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;return GOOD; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;int filecopy(FILE *fi, FILE *fo)&lt;br /&gt;{&lt;br /&gt;int c, nbytes;&lt;br /&gt;&lt;br /&gt;rewind(fi);&lt;br /&gt;rewind(fo); &lt;br /&gt;for (;;) {&lt;br /&gt;c = fread(Buffer, 1, FBUFSIZ, fi);&lt;br /&gt;if (c == 0) { &lt;br /&gt;break; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;nbytes = fwrite(Buffer, 1, c, fo);&lt;br /&gt;if (nbytes != c) {&lt;br /&gt;return FAIL; &lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;return GOOD; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;FILE *fi, *fo;&lt;br /&gt;char *ptr;&lt;br /&gt;int i;&lt;br /&gt;&lt;br /&gt;printf("*GA Developer's Backup Utility. Version 1.0\n"&lt;br /&gt;"(C) *GA, 1995\n\n");&lt;br /&gt;&lt;br /&gt;if (argc != 2) {&lt;br /&gt;fprintf(stderr, "Usage: BK \n");&lt;br /&gt;return 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ((Buffer = malloc(FBUFSIZ)) == NULL&lt;br /&gt;(in_buf = malloc(FBUFSIZ)) == NULL&lt;br /&gt;(out_buf = malloc(FBUFSIZ)) == NULL) {&lt;br /&gt;fprintf(stderr, "Not enough memory\n");&lt;br /&gt;return 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ((fi = fopen(argv[1], "rb")) == NULL) {&lt;br /&gt;ptr = argv[1]; &lt;br /&gt;OPN_ERR: &lt;br /&gt;fprintf(stderr, "File could not be opened: '%s'\n", ptr);&lt;br /&gt;return 3;&lt;br /&gt;}&lt;br /&gt;setvbuf(fi, in_buf, _IOFBF, FBUFSIZ); &lt;br /&gt;&lt;br /&gt;strcpy(CmpFile, argv[1]);&lt;br /&gt;ptr = strchr(CmpFile, '.');&lt;br /&gt;if (ptr == NULL)&lt;br /&gt;ptr = strchr(CmpFile, '\0');&lt;br /&gt;&lt;br /&gt;for (i = 1; i &lt;= 999; ++i) {sprintf(ptr, ".%03d", i);if (access(CmpFile, 0))break;} if (i == 1000) {fprintf(stderr, "Backup operation failed: File limit!\n");return 3;}strcpy(OutFile, CmpFile); if (i &gt; 1) {&lt;br /&gt;sprintf(ptr, ".%03d", i-1);&lt;br /&gt;&lt;br /&gt;if ((fo = fopen(CmpFile, "rb")) == NULL) {&lt;br /&gt;ptr = CmpFile;&lt;br /&gt;goto OPN_ERR;&lt;br /&gt;} &lt;br /&gt;setvbuf(fo, out_buf, _IOFBF, FBUFSIZ); &lt;br /&gt;&lt;br /&gt;if (!filecmp(fi, fo)) {&lt;br /&gt;printf("No differences encountered: '%s'\n", CmpFile);&lt;br /&gt;return 0;&lt;br /&gt;} &lt;br /&gt;fclose(fo); &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;printf("File being copied: %s ---&gt; %s\n", argv[1], OutFile);&lt;br /&gt;&lt;br /&gt;if ((fo = fopen(OutFile, "wb")) == NULL) {&lt;br /&gt;ptr = OutFile;&lt;br /&gt;goto OPN_ERR;&lt;br /&gt;}&lt;br /&gt;setvbuf(fo, out_buf, _IOFBF, FBUFSIZ); &lt;br /&gt;&lt;br /&gt;if (filecopy(fi, fo)) {&lt;br /&gt;fprintf(stderr, "File copy error!\n");&lt;br /&gt;return 4;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fcloseall();&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Uygulama 3 : bol.c ve bir.c programları :&lt;br /&gt;&lt;br /&gt;bir dosyanın belirkli byte büyüklüğünde n kadar sayıda dosyaya bölünmesi ve daha sonra başka bir programla bu dosyaların tekrar birleştirilmesi.&lt;br /&gt;&lt;br /&gt;/*******bol.c *******************/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;#define MAX_LEN 80&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;FILE *fs, *fd;&lt;br /&gt;char fsname[MAX_LEN];&lt;br /&gt;char fdname[MAX_LEN] = "dos0001.xxx";&lt;br /&gt;int chunk;&lt;br /&gt;long no_of_chars = 0L;&lt;br /&gt;int no_of_files = 0;&lt;br /&gt;int ch;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (argc != 3) {&lt;br /&gt;printf("bolunecek dosyanin ismini giriniz : ");&lt;br /&gt;gets(fsname);&lt;br /&gt;printf("kac byte'lik parcalara bolmek istiyorsunuz?");&lt;br /&gt;scanf("%d", &amp;chunk);&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;strcpy(fsname, argv[1]);&lt;br /&gt;chunk = atoi(argv[2]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;printf("%s dosyasi %d uzunlugunda dosyalara bolunecek!\n", fsname, chunk);&lt;br /&gt;&lt;br /&gt;fs = fopen(fsname, "rb");&lt;br /&gt;if (fs == NULL) {&lt;br /&gt;printf("%s dosyasi acilamiyor!\n", fsname);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;fd = NULL;&lt;br /&gt;&lt;br /&gt;while ((ch = fgetc(fs)) != EOF) {&lt;br /&gt;if (fd == NULL) {&lt;br /&gt;fd = fopen(fdname, "wb");&lt;br /&gt;if (fd == NULL) {&lt;br /&gt;printf(" %s dosyasi yaratilamiyor!\n", fdname);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;no_of_files++;&lt;br /&gt;printf("%s dosyasi yaratildi!\n", fdname);&lt;br /&gt;}&lt;br /&gt;fputc(ch, fd);&lt;br /&gt;no_of_chars++;&lt;br /&gt;if (no_of_chars % chunk == 0) {&lt;br /&gt;fclose(fd);&lt;br /&gt;printf("%s dosyasi kapatildi!\n", fdname);&lt;br /&gt;fd = NULL;&lt;br /&gt;sprintf(fdname, "dos%04d.xxx", no_of_files + 1);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;fclose(fs);&lt;br /&gt;if (no_of_chars % chunk != 0) {&lt;br /&gt;fclose(fd);&lt;br /&gt;printf("%s dosyasi kapatildi!\n", fdname);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;printf("%ld uzunlugunda %s dosyasi %d uzunlugunda %d adet dosyaya bolundu!\n",&lt;br /&gt;no_of_chars, fsname, chunk, no_of_files);&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*******bir.c *******************/&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;#define MAX_LEN 80&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;FILE *fs, *fd;&lt;br /&gt;char fdname[MAX_LEN];&lt;br /&gt;char fsname[MAX_LEN] = "dos0001.xxx";&lt;br /&gt;int ch;&lt;br /&gt;int no_of_files = 0;&lt;br /&gt;long no_of_chars = 0L;&lt;br /&gt;int k;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (argc != 2) {&lt;br /&gt;printf("birlestirilecek dosyanin ismini giriniz : ");&lt;br /&gt;gets(fdname);&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;strcpy(fdname, argv[1]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fd = fopen(fdname, "wb");&lt;br /&gt;if (fd == NULL) {&lt;br /&gt;printf("%s dosyasi yaratilamiyor!\n", fdname);&lt;br /&gt;exit(EXIT_FAILURE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;printf("%s dosyasi yaratildi!\n", fdname);&lt;br /&gt;while (fs = fopen(fsname, "rb")) {&lt;br /&gt;no_of_files++;&lt;br /&gt;printf("%s dosyasi acildi!\n", fsname);&lt;br /&gt;&lt;br /&gt;while ((ch = fgetc(fs)) != EOF) {&lt;br /&gt;fputc(ch, fd);&lt;br /&gt;no_of_chars++;&lt;br /&gt;}&lt;br /&gt;fclose(fs);&lt;br /&gt;printf("%s dosyasi kapatildi!\n", fsname);&lt;br /&gt;sprintf(fsname, "dos%04d.xxx", no_of_files + 1);&lt;br /&gt;}&lt;br /&gt;fclose(fd);&lt;br /&gt;printf("%s dosyasi kapatildi!\n", fdname);&lt;br /&gt;printf("%d adet dosya %ld uzunlugunda %s ismli dosya altinda\ birlestirildi!\n", no_of_files, no_of_chars, fdname);&lt;br /&gt;&lt;br /&gt;for (k = 1; k &lt;= no_of_files; ++k) {&lt;br /&gt;sprintf(fsname, "dos%04d.xxx", k);&lt;br /&gt;remove(fsname);&lt;br /&gt;printf("%s dosyasi silindi!\n", fsname);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-7325094304249407288?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/7325094304249407288/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=7325094304249407288' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/7325094304249407288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/7325094304249407288'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2007/12/dosyalar-ikincil-bellekte-tanmlanm.html' title=''/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-2121720426965478235</id><published>2007-12-08T09:44:00.000-08:00</published><updated>2008-10-13T12:58:39.747-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C ye giris yapalım'/><title type='text'>C ye giris yapalım</title><content type='html'>GiRiŞ&lt;br /&gt;&lt;br /&gt;Bilgisayar, verileri saklayan , bunlar üzerinde çok hızlı işlem yapan ve istenen verileri sunan bir aygıttır.&lt;br /&gt;Donanım (hardware) ve yazılım(software) diye iki bölüme ayrlır. Donanım bilgisayarın fiziksel bileşenleridir. Yazılım ise donanımı oluşturan bileşenlerin çalışmasını ve işlevlerini yerine getirmesini sağlayan programlardır.&lt;br /&gt;&lt;br /&gt;İşlemci&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Denetim Aritmetik Girdi&lt;br /&gt;Birimi Mantık Çıktı&lt;br /&gt;Birimi Ana Bellek&lt;br /&gt;Yan Bellek&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Girdi birimleri : Veri ve program girilmesini sağlar. Klavye, fare, kart okuyucu ...&lt;br /&gt;Çıktı birimleri : İstenen verilerin kullanıcıya sunulduğu ortam. Ekran, yazıcı...&lt;br /&gt;Ana Bellek : Programların ve işlenen verilerin geçici olarak saklandığı birim.&lt;br /&gt;Yan bellek : Bilgilerin (veri, program) kalıcı olarak saklandığı ortamlar. Disket, disk, manyetik şerit.&lt;br /&gt;&lt;br /&gt;Bilgisayar broşuründe olan kavramlar, bit, byte, ... RAM, ROM...&lt;br /&gt;&lt;br /&gt;n Bu günkü anlamda ilk bilgisayar ENIAC [Electronic Numeric integrator and computer]&lt;br /&gt;30 ton, kablolar ile programlama&lt;br /&gt;n 1842, Charles Babbag , analitik makine tasarlıyor. Programlanabilir bir cihaz Öncesi Hesap Makinesi. Ada Agusta programcısı.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bilgisayarlar :&lt;br /&gt;1. Kusak 39 - 58 Vakum tüp ile çalışıyor&lt;br /&gt;2. Kusak 58 - 64 Transistör&lt;br /&gt;3. Kusak 64 - 75 Entegre&lt;br /&gt;4. Kusak 75 - --- Yüksek ölçekli entegre&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;n Micro computer ( PC ) ( bu gün 50 - MIPS)&lt;br /&gt;n Workstation&lt;br /&gt;n Mini Computer&lt;br /&gt;n Main Frame (50 lerde 50 IPS)&lt;br /&gt;n Super Computer&lt;br /&gt;Bilgisayarın yapısı&lt;br /&gt;n Bellek (...., birimi byte bit)&lt;br /&gt;n CPU ( Bilgiyi işleyen kısım bellekten okur - yazar)&lt;br /&gt;n Denetim Birimi ( Hangi işlem, ne zaman yapılacak, belirler (gerekli işaretleri üretir))&lt;br /&gt;n Giriş/Çıkış : klavye (veya benzer)&lt;br /&gt;: ekran (veya benzer)&lt;br /&gt;n İkincil ( yardımcı ) bellek (Kütük olarak saklı bilgiler.)&lt;br /&gt;n Hardware - Software&lt;br /&gt;&lt;br /&gt;Bilgisayarlar kendisine sorulan sorulara hemen cevap veren, bir sürü problemi çözen bir aygıt değildir. Bilgisayarda yapılan her tür iş, ilk önce insan aklının süzgecinden geçiyor, insanlar tarafından etraflıca tasarlanıyor, planlanıp programlanıyor [1].&lt;br /&gt;&lt;br /&gt;ilk yapılan bilgisayarın karşına geçip hemen&lt;br /&gt;en eski soruyu sormuşlar "Tanrı var mı".&lt;br /&gt;Bilgisayar kısa bir düşünmeden sonra "Evet artık var".&lt;br /&gt;&lt;br /&gt;Bu nedenle, önce bilgisayara problemin çözümü öğretilmelidir. Fakat bunun için bizim problemi çözmemiz gerekir. Ve daha sonra bir programlama dili ile bu çözüm bilgisayara aktarılmalıdır.&lt;br /&gt;&lt;br /&gt;1- Problem Çözme ve Algoritmalar&lt;br /&gt;1.1 Problem Çözme&lt;br /&gt;Problem çözmede, soruna hemen girişmek yerine, dikkatli ve sistematik yaklaşım ilke olmalıdır. Problem iyice anlaşılmalı ve mümkün olduğu kadar küçük parçalara ayırılmaladır.&lt;br /&gt;Descartes tarafından "Discourse on Method" isimli kitabında anlatılan problem çözme teknikleri;[2]&lt;br /&gt;&lt;br /&gt;1. Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmeyin; tahmin ve önyargılardan kaçının.&lt;br /&gt;2. Karşılaştığınız her güçlüğü mümkün olduğu kadar çok parçaya bölün.&lt;br /&gt;3. Düzenli bir biçimde düşünün; anlaşılması en kolay olan şeylerle başlayıp yavaş yavaş daha zor ve karmaşık olanlara doğru ilerleyiniz.&lt;br /&gt;4. Olaya bakışınız çok genel, hazırladığınız ayrıntılı liste ise hiçbir şeyi dışarıda bırakmayacak kadar kusursuz ve eksiksiz olsun.&lt;br /&gt;&lt;br /&gt;1.2 Algoritmalar&lt;br /&gt;Belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.&lt;br /&gt;İ.S. 9.yy da İranlı Musaoğlu Horzumlu Mehmet&lt;br /&gt;(Alharezmi adını araplar takmıştır) problemlerin çözümü için genel kurallar oluşturdu. Algoritma Alharezmi'nin Latince okunuşu.&lt;br /&gt;Her algoritma aşağıdaki kriterleri sağlamalıdır.&lt;br /&gt;1. Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.&lt;br /&gt;2. Çıktı: En azından bir değer üretilmeli.&lt;br /&gt;3. Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.&lt;br /&gt;4. Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli.&lt;br /&gt;5. Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.&lt;br /&gt;Not: Bir program için 4. özellik geçerli değil. işletim sistemleri gibi program sonsuza dek çalışırlar .&lt;br /&gt;&lt;br /&gt;Örnek 1.2.1 : 1'den 100'e kadar olan sayıların toplamını veren algoritma.&lt;br /&gt;1. Toplam T, sayılar da i diye çağırılsın.&lt;br /&gt;2. Başlangıçta T'nin değeri 0 ve i'nin değeri 1 olsun.&lt;br /&gt;3. i'nin değerini T'ye ekle.&lt;br /&gt;4. i'nin değerini 1 arttır.&lt;br /&gt;5. Eğer i'nin değeri 100'den büyük değil ise 3. adıma git.&lt;br /&gt;6. T'nin değerini yaz.&lt;br /&gt;Algoritmaların yazım dili değişik olabilir. Günlük konuşma diline yakın bir dil olabileceği gibi simgelere dayalı da olabilir. Akış şeması eskiden beri kullanıla gelen bir yapıdır. Algoritmayı yazarken farklı anlamlar taşıyan değişik şekildeki kutulardan yararlanılır. Yine aynı amaç için kullanılan programlama diline yakın bir (sözde kod = pseudo code) dil , bu kendimize özgü de olabilir, kullanılabilir.&lt;br /&gt;&lt;br /&gt;Aynı algoritmayı aşağıdaki gibi yazabiliriz.&lt;br /&gt;1. T=0 ve i=0&lt;br /&gt;2. i'nin değerini T'ye ekle.&lt;br /&gt;3. i'yi 1 arttır.&lt;br /&gt;4. i&lt;101 ise 2.adıma git.&lt;br /&gt;5. T'nin değerini yaz.&lt;br /&gt;&lt;br /&gt;Algoritmayı bir de akış şeması ile gerçekleyelim.&lt;br /&gt;&lt;br /&gt;T=0&lt;br /&gt;İ=0&lt;br /&gt;&lt;br /&gt;İ’nin Değrini T’ye ekle&lt;br /&gt;&lt;br /&gt;İ’yi bir arttır&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;İ&lt;101&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;T’yi yaz&lt;br /&gt;&lt;br /&gt;Örnek 1.2.2 : ax2+bx+c=0 tipi bir denklemin köklerini veren algoritma.&lt;br /&gt;Girdi : a, b ve c katsayıları Çıktı : denklemin kökleri&lt;br /&gt;1. a, b ve c katsayılarını al.&lt;br /&gt;2. D = b2-4ac değerini hesapla.&lt;br /&gt;3. D&lt;0 ise gerçel kök yok. 7. adıma git.&lt;br /&gt;4.&lt;br /&gt;5 .&lt;br /&gt;6. değerlerini yaz.&lt;br /&gt;7. Dur.&lt;br /&gt;Döngü Gösterimi&lt;br /&gt;Tekrarlanan adımlar&lt;br /&gt;n. Koşul sağlandığı sürece&lt;br /&gt;n.1 ...&lt;br /&gt;n.2 ... tekrarlanan adımlar&lt;br /&gt;n.3 ...&lt;br /&gt;&lt;br /&gt;Örnek 1.2.3 : İki tamsayının çarpma işlemini sadece toplama işlemi kullanarak gerçekleyin.&lt;br /&gt;Girdi : iki tamsayı&lt;br /&gt;Çıktı : sayıların çarpımı&lt;br /&gt;1. a ve b sayılarını oku&lt;br /&gt;2. c =0&lt;br /&gt;3. b&gt;0 olduğu sürece tekrarla&lt;br /&gt;.3.1. c=c + a&lt;br /&gt;3.2. b = b-1&lt;br /&gt;4. c değerini yaz ve dur&lt;br /&gt;&lt;br /&gt;Örnek 1.2.4 : Bir tamsayının faktoriyelini hesaplayınız.&lt;br /&gt;Girdi : Bir tamsayı&lt;br /&gt;Çıktı : sayının faktoriyel&lt;br /&gt;İlgili formul: Faktoriyel(n)=1*2*...*n&lt;br /&gt;1. n değerini oku&lt;br /&gt;2. F=1&lt;br /&gt;3. n &gt;1 olduğu sürece tekrarla&lt;br /&gt;.3.1. F=F*n&lt;br /&gt;3.2. n= n-1&lt;br /&gt;4. F değerini yaz&lt;br /&gt;Örnek 1.2.5 : İki tamsayının bölme işlemini sadece çıkarma işlemi kullanarak gerçekleyin. Bölüm ve kalanın ne olduğu bulunacak.&lt;br /&gt;1. a ve b değerlerini oku&lt;br /&gt;2. m=0&lt;br /&gt;3. a&gt;=b olduğu sürece tekrarla&lt;br /&gt;3.1 a=a-b&lt;br /&gt;3.2 m = m + 1&lt;br /&gt;4. kalan a ve bölüm m 'yi yaz&lt;br /&gt;&lt;br /&gt;Örnek 1.2.6 : 100 tane sayıyı okuyup, ortalamasını bul&lt;br /&gt;1. T=0, i=0&lt;br /&gt;2. i&lt;101 olduğu sürece tekrarla&lt;br /&gt;2.1 m değerini oku&lt;br /&gt;2.2 T = T + m&lt;br /&gt;2.3 i = i + 1&lt;br /&gt;3. T = T / 100&lt;br /&gt;4. Ortalama T ‘yi yaz&lt;br /&gt;5. Dur&lt;br /&gt;&lt;br /&gt;Örnek 1.2.7 : Bir sınava giren öğrencilerin not ortalamasının hesaplanması&lt;br /&gt;1. Tüm sınav kağıtlarını inceleyip notların toplamını hesapla&lt;br /&gt;2. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla&lt;br /&gt;3. Ortalamayı yaz.&lt;br /&gt;&lt;br /&gt;1. Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et&lt;br /&gt;2. Sıradaki sınav kağıdının notunu notların toplamına ekle&lt;br /&gt;3. İncelenen sınav kağıdı sayısını Bir arttır&lt;br /&gt;4. İncelenecek sınav kağıdı var ise 2. Adıma git&lt;br /&gt;5. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hasapla&lt;br /&gt;6. Ortalamayı yaz&lt;br /&gt;&lt;br /&gt;1. Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et&lt;br /&gt;2. Her bir sınav kağıdı için&lt;br /&gt;2.1. Sıradaki sınav kağıdının notunu notların toplamına ekle&lt;br /&gt;2.2. İncelenen sınav kağıdı sayısını bir arttır&lt;br /&gt;3. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla&lt;br /&gt;4. Ortalamayı yaz&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Koşul Gösterimi&lt;br /&gt;&lt;br /&gt;n. Koşul doğru ise&lt;br /&gt;n.D.1&lt;br /&gt;n.D.2 doğru olduğunda işlenen adımlar&lt;br /&gt;n.D.3&lt;br /&gt;aksi halde&lt;br /&gt;n.Y.1&lt;br /&gt;n.Y.2 yanlış olduğunda işlenen adımlar&lt;br /&gt;n.Y.3&lt;br /&gt;&lt;br /&gt;Kök bulma örneğinde 3. Adımı tekrar yazarsak&lt;br /&gt;3. D&gt;=0 ise&lt;br /&gt;3.D.1&lt;br /&gt;3.D.2&lt;br /&gt;aksi halde&lt;br /&gt;3.Y.1 Reel kök yoktur&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sorular:&lt;br /&gt;* Girilen üç sayıdan en büyüğünü bulan algoritmayı yazınız.&lt;br /&gt;* Tamsayılarda üs alma işlemini gerçekleştiren algoritmayı yazınız ( ab ).&lt;br /&gt;* 1-100 arasında tutulan bir sayıyı tahmin eden algoritmayı yazınız.&lt;br /&gt;&lt;br /&gt;Örnek 1.2.8 : Aracın otopark ücretinin hesaplanması. Araçların en fazla 24 saat kaldığını varsayın.&lt;br /&gt;0 - 2 saat 150 bin&lt;br /&gt;2 - 8 saat 300 bin&lt;br /&gt;8-24 saat 500 bin&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Aracın kaç saat kaldığını öğren ( t olsun ).&lt;br /&gt;2. t &lt;= 2 ise&lt;br /&gt;2.D.1. ücret = 150 bin&lt;br /&gt;Aksi halde&lt;br /&gt;2.Y.1. t&lt;=8 ise&lt;br /&gt;2.Y.1.D.1. ücret = 300 bin&lt;br /&gt;Aksi halde&lt;br /&gt;2.Y.1.Y.1. ücret = 500 bin&lt;br /&gt;&lt;br /&gt;3. ücreti yaz&lt;br /&gt;4. Dur&lt;br /&gt;&lt;br /&gt;Örnek 1.2.9: Sınavdaki en büyük notun bulan algoritma.&lt;br /&gt;&lt;br /&gt;1. En büyük = ilk sınav kağıdındaki not (ya da olabilecek en düşük değer kabul edilebilir).&lt;br /&gt;2. İncelenecek sınav kağıdı var ise&lt;br /&gt;2.1 Sınav kağıdındaki not &gt; En büyük ise En büyük = Sınav kağıdındaki not&lt;br /&gt;&lt;br /&gt;3. En büyük değerini yaz.&lt;br /&gt;4. Dur&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Algoritmanın yazımı daha simgesel olabilir. Ni i. Öğrencinin notu olsun.&lt;br /&gt;&lt;br /&gt;1. EB = N1&lt;br /&gt;2. i = 2&lt;br /&gt;3. İncelenecek sınav kağıdı var ise&lt;br /&gt;3.1 Ni&gt;EB =&gt; EB = Ni&lt;br /&gt;3.2 i = i + 1&lt;br /&gt;&lt;br /&gt;4. EB’ yi yaz.&lt;br /&gt;5. Dur&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 1.2.10 : Programın C dili ile yazılıp çalışır hale getirilmesi.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Programı bilgisayara gir&lt;br /&gt;2. Kaynak dosya olarak kaydet&lt;br /&gt;3. Kaynak dosyayı derle ( compile)&lt;br /&gt;4. Derleme sonucunda hata var ise&lt;br /&gt;4.1 Hataları düzelt&lt;br /&gt;4.2 3. Adıma git&lt;br /&gt;5. Oluşan amaç dosyasına diğer dosyaları bağla (link)&lt;br /&gt;6. Bağlama sonucunda hata var ise&lt;br /&gt;6.1. Hataları düzelt&lt;br /&gt;6.2. Hatalar kaynak dosya ile ilgili ise 2. adıma aksi halde 5. adıma git&lt;br /&gt;7. Program çalıştırılmaya hazır&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2- Programlamaya Giriş&lt;br /&gt;&lt;br /&gt;Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.&lt;br /&gt;Önceki bölümde bir problemin çözümü ile ilgili teknikler sunmuştuk. Bir problemi bilgisayar ile çözmek için geliştireceğimiz programın yazımında izleyeceğimiz adımlar:&lt;br /&gt;&lt;br /&gt;i) Problemin ne olduğunu kavra. Çözüm için gereksinimleri belirle.&lt;br /&gt;ii) Problemin girdilerini, çıktılarını ve diğer kısıtlama ve gereksinimleri belirle ( bilgilerin giriş ve çıkış biçimlerinin nasıl olacağına kadar).&lt;br /&gt;iii) Problemin çözümünü veren algoritmayı yaz.&lt;br /&gt;iv) Algoritmayı bir programla dili ile yaz.&lt;br /&gt;v) Programın doğru çalışıp çalışmadığını test et. Bu testi değişik veriler (girdiler) için tekrarla.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.1 İlk Program Örneği&lt;br /&gt;#include Kullanılan işlevler ile ilgili başlık dosyası&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;int i ; Değişken tanımı&lt;br /&gt;scanf("%d",&amp;i); Programın gövdesi&lt;br /&gt;i:=i*i;&lt;br /&gt;printf("%d",i);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;BCPL à B (1967 Ken Thompson) à C (Denis Ritchie unix i yazmak için)&lt;br /&gt;az sayıda saklı sözcük&lt;br /&gt;kısa ve etkin program&lt;br /&gt;çok sayıda işleç&lt;br /&gt;assembler e yakın kod&lt;br /&gt;taşınabilir kod&lt;br /&gt;kullanıcıya bırakılan kontroller (dizinin boyutu gibi )&lt;br /&gt;düşük okunabilirlik&lt;br /&gt;&lt;br /&gt;source -----&gt; compiler -----&gt; object -----&gt; link&lt;br /&gt;kaynak derleyeci amaç bağlama&lt;br /&gt;kaynak kod : C dili ile yazılmış olan program.&lt;br /&gt;derleyeci : Kaynak kodu makina koduna çevirir&lt;br /&gt;amaç kodu : Kaynak kodun makina dilindeki karşılığı&lt;br /&gt;bağlama : Birden fazla amaç kodu dosyasının tek dosyada birleştirilmesi&lt;br /&gt;2.2 Veri Tipleri&lt;br /&gt;&lt;br /&gt;Veri tiplerini vermeden önce yazılan bir programın geçtiği aşamalara göz atalım.&lt;br /&gt;&lt;br /&gt;2.2.1 Int Tip&lt;br /&gt;Integer = Tamsayı&lt;br /&gt;Tamsayıları içerir. Bellekte 2 Byte tutar.&lt;br /&gt;5 , -19 , 25000 gibi&lt;br /&gt;Minimum : -231 = -32768&lt;br /&gt;Maksimum : 231-1 = 32767&lt;br /&gt;&lt;br /&gt;2.2.2 Gerçel Tipler (Float, Double)&lt;br /&gt;Gerçel sayıları içerirler.&lt;br /&gt;float : Bellekte 4 Byte yer tutar. 3.4E-38 ile 3.4E+38 aralığında değer alır. Hassasiyet 7-8 basamaktır.&lt;br /&gt;double : Bellekte 8 Byte ter tutar. 1.7E-308 ile 1.7E308 aralığında değer alır. Hassasiyet 15-16 basamaktır.&lt;br /&gt;&lt;br /&gt;218.1 , -5.2 , 4.0&lt;br /&gt;&lt;br /&gt;Bilimsel gösterim biçimi 2.5*103 = 2.5E3 2.5*10-3 = 2.5E-3&lt;br /&gt;&lt;br /&gt;2.2.3 Char Tip&lt;br /&gt;Char : Karakter : Alfanumerik karakterleri içerir.&lt;br /&gt;'5' , '*' , 'K'&lt;br /&gt;&lt;br /&gt;2.3 Sabitler (CONST)&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;const float PI=3.14; Tanımlama kısmı&lt;br /&gt;float r, Alan;&lt;br /&gt;scanf("%f",r);&lt;br /&gt;alan := PI*r*r;&lt;br /&gt;printf(('Alan = %f', alan);&lt;br /&gt;}&lt;br /&gt;CONST (sabit) : Değeri programın çalışması boyunca değiştirilemez. Kullanım biçimi&lt;br /&gt;const tip Belirleyici=değeri;&lt;br /&gt;const float PI=3.14;&lt;br /&gt;Tip belirtilmez ise tamsayı kabul edilir.&lt;br /&gt;&lt;br /&gt;2.4 Değişkenler&lt;br /&gt;Değeri programın çalışması boyunca değiştirilekir. Kullanım biçimi:&lt;br /&gt;Tip Belirleyici [,Belirleyici] ;&lt;br /&gt;int i;&lt;br /&gt;float alan;&lt;br /&gt;&lt;br /&gt;2.5 Belirleyiciler (Identifier)&lt;br /&gt;Bileşenlere isim verme. (Sabit, değişken, altprogram, etiket, tipler (kullanıcı tanımlı)).&lt;br /&gt;&lt;br /&gt;2.5.1 Kısıtlamalar&lt;br /&gt;. İlk karakteri rakam olamaz&lt;br /&gt;. Sadece harfler, rakamlar ve _ (underscore) karakterinin birleşiminden oluşabilir.&lt;br /&gt;. C diline ait saklı (reserved) sözcükler kullanılamaz.&lt;br /&gt;. En fazla 31 karakter olabilir.&lt;br /&gt;. Küçük - büyük harf ayırımı vardır.&lt;br /&gt;&lt;br /&gt;2.5.2 isimlerin Seçimi&lt;br /&gt;. Belirleyicinin kullanım amacına uygun anlamlı isim seçin. (Hungarian notation)&lt;br /&gt;. Ne fazla kısa ne de fazla uzun olsun. 3 - 10 karakter uzunluğunda olmasını alışkanlı edinin.&lt;br /&gt;2.6 Matematiksel ifadeler&lt;br /&gt;Matematiksel ifadeleri günlük hayattaki biçimde bilgisayarda yazamadığımız için belli bir kurallar uymamız gerekir. Kullandığımız matematiksel işlemler ve anlamları şöyledir:&lt;br /&gt;+ , - , * , / toplama, çıkarma, çarpma, bölme&lt;br /&gt;% tamsayı bölme sonucundaki kalanı verir (modulus)&lt;br /&gt;7. / 2 ---&gt; 3.5 (nokta sayının gerçel yorumlanmasını sağlar)&lt;br /&gt;7 / 2 ---&gt; 3 (sayılar int kabul edilip sonuçta int tipine dönüştürülür)&lt;br /&gt;7 % 2 ---&gt; 1&lt;br /&gt;2 % 7 ---&gt; 2&lt;br /&gt;2 / 7 ---&gt; 0&lt;br /&gt;Matematiksel ifadeler hesaplanırken izlenen adımlar:&lt;br /&gt;1. Önce parantez içindeki ifadeler hesaplanır. İçiçe parantezler var ise hesaplamaya en içteki parantezden başlanır.&lt;br /&gt;2. ilk önce * , / ve % işlemleri daha sonra + ve - işlemleri yapılır.&lt;br /&gt;3. Öncelik sırası aynı olan işlemlerde hesaplama soldan sağa doğru yapılır. 5./2*3 --&gt; 7.5&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bir C Programının Genel Yapısı&lt;br /&gt;&lt;br /&gt;başlık dosyaları. Kullanılan deyimler ile ilgili&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;sabitler ; sabitlerin tanımlama bölümü&lt;br /&gt;değişkenler; değişkenleri tanımlama bölümü&lt;br /&gt;deyimler; Program gövdesi&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;2.7 Atama Deyimi (Assignment)&lt;br /&gt;Bir değişkene bir değer(sabit, değişken, ifade) vermek.&lt;br /&gt;DeğişkenAdı = değer;&lt;br /&gt;x = 8 ;&lt;br /&gt;y = x + 15 ;&lt;br /&gt;y = (8 - x) / (2 - x) ;&lt;br /&gt;&lt;br /&gt;Örnek 2.7.1: 5x2+2 fonksiyonunun x=4.8 noktasındaki değerini&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;float x, y ;&lt;br /&gt;x = 4.8;&lt;br /&gt;y = 5 * x * x + 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Örnek 2.7.2: Vize ve final notlarınından geçme notu&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;float vize, final, ort;&lt;br /&gt;vize = 50;&lt;br /&gt;final = 60;&lt;br /&gt;ort = vize * 0.4 + final * 0.6;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Örnek 2.7.3: 1998 yılına kadar geçen gün sayısı&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;float gun;&lt;br /&gt;int yil = 1996;&lt;br /&gt;gun = 365 * (yil - 1);&lt;br /&gt;gun = gun + (yil -1 ) / 4;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.8 printf işlevi&lt;br /&gt;Program içinde istenen değerleri çıktı birimlerine göndermek için kullanılır. Normal kullanımında çıktı birimi olarak ekran kabul edilir. Kullanım biçimi:&lt;br /&gt;&lt;br /&gt;prinf( kontrol, )&lt;br /&gt;ile belirtilen bilgiye göre parametreleri yazar. Kontrol metini iki kısımdan oluşur.&lt;br /&gt;o sıradan karakterler: doğrudan yazılırlar.&lt;br /&gt;o dönüşüm/biçim belirleyici karakterler: Değerlerin nasıl yazılacağı bildirilir.&lt;br /&gt;&lt;br /&gt;printf(" sonuç = %d", k);&lt;br /&gt;--- integer değer yazılacaktır&lt;br /&gt;--------- ekrana aynen aktarılır&lt;br /&gt;&lt;br /&gt;Dönüşüm belirlemek için önce % karakteri ve ardından dönüşümün nasıl&lt;br /&gt;olacağını belirten karakter verilir. Bu karakterlerden bazıları:&lt;br /&gt;&lt;br /&gt;d : decimal (integer)&lt;br /&gt;u : unsigned decimal&lt;br /&gt;c : char (tek karakter)&lt;br /&gt;s : string&lt;br /&gt;e : float/double sayıyı bilimsel gösterimde yaz&lt;br /&gt;f : float/double sayıyı [-] mmm.nnnnn biçiminde yaz&lt;br /&gt;ld : long integer&lt;br /&gt;lu : unsigned long integer&lt;br /&gt;Le,Lf : long double&lt;br /&gt;&lt;br /&gt;ESC dizileri : \n : satır başı, \a : zil , \t : tab, \b : bir karakter geri&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;program parçası ekranda görünen / imleçin konumu&lt;br /&gt;i = 5 ;&lt;br /&gt;printf("%d",i) ; 5&lt;br /&gt;printf("'i=%d",i) ; i=5&lt;br /&gt;printf("i=") ;&lt;br /&gt;printf("%d",i) ; i=5 -&lt;br /&gt;&lt;br /&gt;printf("i=\n") ; i=&lt;br /&gt;printf("%d",i) ; 5 alt satıra geçer&lt;br /&gt;&lt;br /&gt;printf('i=%d\n",i) ; i=5 alt satıra geçer&lt;br /&gt;&lt;br /&gt;printf("%d - %d",i, 5*i); 5 - 25&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Biçimli yazdırma&lt;br /&gt;% karakteri ile dönüşüm karakteri arasına aşağıdaki karakterler de kullanılabilir.&lt;br /&gt;&lt;br /&gt;- : sola dayalı yaz&lt;br /&gt;m : yazılacak değer için ayırılan alan&lt;br /&gt;n : değerin kaç karekteri yazılacağı&lt;br /&gt;&lt;br /&gt;s = "ABCDEF"&lt;br /&gt;printf("%10s ",s); . . . . A B C D E F&lt;br /&gt;&lt;br /&gt;printf("%10.3s ",s); . . . . . . . A B C&lt;br /&gt;&lt;br /&gt;x = 128.5 ;&lt;br /&gt;printf("%7.2f",x) ; # 128.50&lt;br /&gt;&lt;br /&gt;x = 85.47 ;&lt;br /&gt;printf("%6.3f",x) ; 85.470&lt;br /&gt;&lt;br /&gt;printf("%6.1f",x) ; ## 85.5&lt;br /&gt;&lt;br /&gt;Örnek 2.8.1 : Yarıçapı belli dairenin alanını hesaplayan programı yazınız. (ilk yazılan program)&lt;br /&gt;#include &lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;const float PI=3.14;&lt;br /&gt;float r, alan;&lt;br /&gt;r = 7;&lt;br /&gt;alan := PI*r*r;&lt;br /&gt;printf(('Alan = %f', alan);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Örnek 2.8.2 : En fazla dört basamak olabilen sayının basamak değerlerini yazdır. % ve / işlemlerinin kullanımı.&lt;br /&gt;#include &lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;int i,y;&lt;br /&gt;&lt;br /&gt;y=1985;&lt;br /&gt;i= y / 1000;&lt;br /&gt;printf("%d",i);&lt;br /&gt;y= y-i*1000;&lt;br /&gt;i= y / 100;&lt;br /&gt;printf(" %d",i);&lt;br /&gt;y = y-i*100;&lt;br /&gt;i= y / 10;&lt;br /&gt;printf(" %d",i);&lt;br /&gt;y = y-i*10;&lt;br /&gt;printf(" %d\n",y);&lt;br /&gt;i = 1985;&lt;br /&gt;printf("%d ",i / 1000);&lt;br /&gt;printf("%d ",(i / 100) % 10);&lt;br /&gt;printf("%d ",(i / 10) % 10);&lt;br /&gt;printf("%d\n",i % 10);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Örnek 2.8.3: ax2+bx+c=0 tipi bir denklemin köklerini veren programı yazınız.&lt;br /&gt;Girdi : a, b ve c katsayıları&lt;br /&gt;Çıktı : denklemim kökleri&lt;br /&gt;Algoritma :&lt;br /&gt;1. a, b ve c katsayılarını oku.&lt;br /&gt;2. Delta= değerini hesapla.&lt;br /&gt;3. x1 ve x2 değerlerini hesapla.&lt;br /&gt;4. Kökleri yaz.&lt;br /&gt;&lt;br /&gt;Programın kodlanması:&lt;br /&gt;&lt;br /&gt;#include /* printf işlevi için */&lt;br /&gt;#include /* sqrt işlevi için */&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;float a, b, c;&lt;br /&gt;float x1, x2;&lt;br /&gt;float d;&lt;br /&gt;&lt;br /&gt;a = 1;&lt;br /&gt;b = -3;&lt;br /&gt;c = 2;&lt;br /&gt;d = b * b - 4 * a * c;&lt;br /&gt;x1 = (-b + sqrt(d)) / (2 * a);&lt;br /&gt;x2 = (-b - sqrt(d)) / (2 * a);&lt;br /&gt;&lt;br /&gt;printf("Kökler = %f , %f",x1, x2);&lt;br /&gt;}&lt;br /&gt;C dilinde karekök almak için bir deyim yoktur. Örnekte bunu yerine getiren C diline eklenmiş olan sqrt() fonksiyonu kullanılmştır. Aşağıda buna benzer artık C derleyecilerinde standart olmuş bazı fonksiyonlar verilmiştir. Bu işlevler math.h başlık dosyasında tanımlıdır.&lt;br /&gt;Fonksiyon x ,y Sonuç&lt;br /&gt;abs(x) int int x'in mutlak değeri&lt;br /&gt;fabs(x) double double x'in mutlak değeri&lt;br /&gt;pow(x, y) double double xy&lt;br /&gt;sqrt(x) double double x'in karekökü&lt;br /&gt;exp(x) double double ex değeri&lt;br /&gt;log(x) double double ln(x) değeri&lt;br /&gt;log10(x) double double log10(x) değeri&lt;br /&gt;ceil(x) double double x ten büyük ilk tamsayı&lt;br /&gt;floor(x) double double x ten küçük ilk tamsayı&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnekler:&lt;br /&gt;ceil(5) 5&lt;br /&gt;ceil(5.2) 6&lt;br /&gt;ceil(-5.2) -5&lt;br /&gt;floor(5) 5&lt;br /&gt;floor(5.2) 5&lt;br /&gt;floor(-5.2) -6&lt;br /&gt;&lt;br /&gt;2.9 scanf İşlevi&lt;br /&gt;Klavyeden veri okumak için kullanılır. Yapı olarak printf işlevi ile hemen hemen aynıdır. Kullanım biçimi:&lt;br /&gt;&lt;br /&gt;scanf( kontrol, )&lt;br /&gt;&lt;br /&gt;Girilen karakterler metininde belirtilen biçimlere göre değişkenlere aktarılır.&lt;br /&gt;Değişkenler işaretçi tipinde olmalıdır. Yani parametre olarak değişkenin adresi gönderilmelidir.&lt;br /&gt;Ayırıcılar boşluk, tab, enter&lt;br /&gt;&lt;br /&gt;scanf("%f %f %f ", &amp;a, &amp;b, &amp;c);&lt;br /&gt;&lt;br /&gt;scanf işlevinin değeri&lt;br /&gt;0 ise hiçbir değişkene değer atanmamış&lt;br /&gt;&gt;0 ise başarılı bir şekilde değer atanan değişken sayısı&lt;br /&gt;int a,b,c;&lt;br /&gt;float m,n;&lt;br /&gt;scanf("%d", &amp;a); Klavyeden tamsayı okur. Girilen değer a değişkenine aktarılır.&lt;br /&gt;scanf("%d %d",&amp;a,&amp;b) Klavyeden girilen ilk değer a değişkenine, ikinci değer b değişkenine aktarılır.&lt;br /&gt;scanf("%f %d", &amp;m, &amp;a); Klavyeden ilki gerçel, ikincisi tamsayı olmak üzere iki değer okur.&lt;br /&gt;&lt;br /&gt;İkinci dereceden denklem çözümünün yapıldığı örnekte katsayıları klavyeden okutmak istersek&lt;br /&gt;&lt;br /&gt;scanf("%f %f %f ", &amp;a, &amp;b, &amp;c);&lt;br /&gt;&lt;br /&gt;Farklı kullanıcı arayüzünde yazarsak&lt;br /&gt;&lt;br /&gt;printf(“Katsayıları sırasıyla giriniz (a b c) :” ); scanf("%f %f %f ", &amp;a, &amp;b, &amp;c);&lt;br /&gt;&lt;br /&gt;printf(“a katsayısını giriniz : “); scanf(“%f”, &amp;a);&lt;br /&gt;printf(“b katsayısını giriniz : “); scanf(“%f”, &amp;b);&lt;br /&gt;printf(“c katsayısını giriniz : “); scanf(“%f”, &amp;c);&lt;br /&gt;&lt;br /&gt;Örnek 2.9.1: Vize ve final notlarınından ortalamayı hesaplayan programda değerlerin klavyeden okunmuş hali.&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;float vize, final, ort;&lt;br /&gt;printf(“Vize notunu giriniz “); scanf(“%f”, &amp;vize);&lt;br /&gt;printf(“Final notunu giriniz “); scanf(“%f”, &amp;final);&lt;br /&gt;ort = vize * 0.4 + final * 0.6;&lt;br /&gt;printf(“Ortalaması = &amp;f\n”, ort);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;2.10 Mantıksal ifadeler&lt;br /&gt;Sonucu Doğru veya Yanlış olan ifadelerdir. Sonuç sıfır ise yanlış aksi halde doğru kabul edilir.&lt;br /&gt;İlişkisel işleçler(operatör) : iki değer arasındaki ilişkiyi test etmek için kullanılır.&lt;br /&gt;işleç anlamı&lt;br /&gt;&gt; büyük&lt;br /&gt;&gt;= büyük - eşit&lt;br /&gt;== eşit&lt;br /&gt;&lt; küçük&lt;br /&gt;&lt;= küçük - eşit&lt;br /&gt;!= eşit değil&lt;br /&gt;&lt;br /&gt;x=8, y=5 için&lt;br /&gt;x &gt; y Doğru&lt;br /&gt;x &lt; y Yanlış&lt;br /&gt;x !=y Doğru&lt;br /&gt;&lt;br /&gt;Mantıksal işleçler : İki mantıksal ifade arasındaki ilişki üzerindeki ilişkide kullanılır.&lt;br /&gt;! DEĞİL (NOT)&lt;br /&gt;&amp;&amp; VE (AND)&lt;br /&gt;VEYA (OR)&lt;br /&gt;&lt;br /&gt;(X&gt;0) &amp;&amp; (X&gt;Y)&lt;br /&gt;(X&gt;0) (Y&gt;0)&lt;br /&gt;&lt;br /&gt;İfadelerde işleçlerin yürütülme sırası&lt;br /&gt;işleç Önceliği&lt;br /&gt;( ) en yüksek (ilk yürütülür)&lt;br /&gt;!&lt;br /&gt;*, /, %&lt;br /&gt;+, -&lt;br /&gt;&lt;, &lt;=, &gt;=, &gt;&lt;br /&gt;==, !=&lt;br /&gt;&amp;&amp;,&lt;br /&gt;= en düşük (son yürütülür)&lt;br /&gt;= işleci sağdan sola, diğerleri soldan sağa doğru yürütülür.&lt;br /&gt;Görüldüğü gibi ifadelerde matematiksel ve mantıksal işlemler bittikten sonra ilişki test edilir.&lt;br /&gt;X=50, Y=80, Z=45 için&lt;br /&gt;( ( X / 4 + Y / 4 + Z / 2 ) &gt;= 50 ) &amp;&amp; ( Z &gt;= 50 )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - Döngü ve Koşul Deyimleri&lt;br /&gt;&lt;br /&gt;Programlar (algoritmalar) üç temel blok kullanılarak gerçekleştirilebilirler. Bunlar; ardarda, bir koşula bağlı olarak ve sonlu sayıda yineleme (döngü) dir.&lt;br /&gt;&lt;br /&gt;3.1 Koşul Deyimleri&lt;br /&gt;&lt;br /&gt;Birkaç seçenekten birini seçmek veya bir deyimin bir koşula bağlı olarak işlemek için kulanılır.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.1.1 if-then-else Deyimi&lt;br /&gt;&lt;br /&gt;if ()&lt;br /&gt;blok_doğru;&lt;br /&gt;else&lt;br /&gt;blok_yanlış;&lt;br /&gt;&lt;br /&gt;Mantıksal ifade doğru ise blok_doğru, yanlış ise else sözcüğünden sonraki blok_yanlış yürütülür. else kısmı seçimlidir, gerekmiyorsa kullanılmayabilir.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 3.1. 1.1 Girilen sayının tek/çift olduğunu yazan program&lt;br /&gt;#include &lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;int i;&lt;br /&gt;scanf("%d", &amp;i);&lt;br /&gt;if ( i % 2 == 1)&lt;br /&gt;printf("Tek");&lt;br /&gt;else&lt;br /&gt;printf("Çift");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Bileşik (Compound) Deyimler&lt;br /&gt;&lt;br /&gt;{ ve } karakterleri ile sınırlandırılmış bir dizi deyimden oluşur.&lt;br /&gt;{&lt;br /&gt;i = 5;&lt;br /&gt;j = i/2;&lt;br /&gt;k = i+1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Eğer bloklarda birden fazla deyim kullanmak gerektiğinde bileşik deyim kullanılır.&lt;br /&gt;&lt;br /&gt;if (yil % 4 == 0) {&lt;br /&gt;subat =29;&lt;br /&gt;gunyil = 366;&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;subat =28;&lt;br /&gt;gunyil = 365;&lt;br /&gt;}&lt;br /&gt;Örnek 3.1.1.2 : İkinci dereceden denklemin köklerinin bulunması.&lt;br /&gt;&lt;br /&gt;if (delta&lt;0)&lt;br /&gt;printf("Gerçel kök yoktur.\n");&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;x1 = (-b + sqrt(delta)) / (2 * a);&lt;br /&gt;x2 = (-b - sqrt(delta)) / (2 * a);&lt;br /&gt;printf("Birinci kök = %f\n" , x1);&lt;br /&gt;printf("ikinci kök = %f\n" , x2);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 3. 1.1.3 : Klavyeden girilen karakterin rakam olduğunun tesbiti.&lt;br /&gt;&lt;br /&gt;char c;&lt;br /&gt;c = getch();&lt;br /&gt;if ((c&gt;='0') &amp;&amp; (c&lt;='9')&lt;br /&gt;printf("Rakam girdiniz.");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 3. 1.1.4 : Girilen üç sayıdan en küçüğünün bulunması (İçiçe IF kullanımı).&lt;br /&gt;&lt;br /&gt;scanf("%d%d%d", &amp;s1, &amp;s2, &amp;s3);&lt;br /&gt;if ((s1&lt;br /&gt;ek =s1;&lt;br /&gt;else&lt;br /&gt;if (s2&lt;br /&gt;ek =s2;&lt;br /&gt;else&lt;br /&gt;ek = s3;&lt;br /&gt;printf('En küçük olanı = %f", ek);&lt;br /&gt;&lt;br /&gt;II. yol :&lt;br /&gt;scanf("%d%d%d", &amp;s1, &amp;s2, &amp;s3);&lt;br /&gt;ek = s1;&lt;br /&gt;if (ek&gt;s2)&lt;br /&gt;ek =s2;&lt;br /&gt;if (ek&gt;s3)&lt;br /&gt;ek =s3;&lt;br /&gt;printf('En küçük olanı = %f", ek);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 3. 1.1.5: Fonksiyonun girilen t değeri için aldığı değeri hesaplayıp yazan program.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;float y, x;&lt;br /&gt;&lt;br /&gt;printf(“x değerini giriniz”);&lt;br /&gt;scanf(“%f”, &amp;x);&lt;br /&gt;if (x &gt; -1 &amp;&amp; x&lt;2)&lt;br /&gt;y = 2/3 * (x + 1);&lt;br /&gt;else&lt;br /&gt;if (x&gt;2 &amp;&amp; x&lt;=3)&lt;br /&gt;y = 2;&lt;br /&gt;else&lt;br /&gt;y = 0;&lt;br /&gt;&lt;br /&gt;printf(“Fonksiyonun değeri = &amp;f”, y);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 3. 1.1.6: Vergi iadesini hesaplan programı yazınız. (elseif yapısı)&lt;br /&gt;(0-60 bin : %10, 60-120 bin : %,120-200 bin : %12,&gt;200 bin : %5)&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;float fat_top, vergi_iade;&lt;br /&gt;printf("Fatura toplamlarını giriniz ");&lt;br /&gt;scanf("%f", &amp;fat_top);&lt;br /&gt;if (fat_top &lt; 60000)&lt;br /&gt;vergi_iade = fat_top * 0.10;&lt;br /&gt;else if (fat_top &lt; 120000)&lt;br /&gt;vergi_iade = 6000 + (fat_top - 60000) * 0.20;&lt;br /&gt;else if(fat_top &lt; 200000)&lt;br /&gt;vergi_iade = 18000 + (fat_top - 120000) * 0.12;&lt;br /&gt;else&lt;br /&gt;vergi_iade = 27600 + (fat_top - 200000) * 0.05;&lt;br /&gt;&lt;br /&gt;printf("Ödenecek vergi iadesi = %f\n", vergi_iade);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 3. 1.1.7: Girilen tarihteki günün adını veren programı yazınız.&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;main ( )&lt;br /&gt;{&lt;br /&gt;int gun, ay, yıl ;&lt;br /&gt;long gt ;&lt;br /&gt;printf(“Tarihi gir”) ; scanf ( “%d %d %d “,&amp;gun)&lt;br /&gt;&lt;br /&gt;/* oncekı yıllardakı gun sayısını hesapla */&lt;br /&gt;&lt;br /&gt;gt=( yıl*1)*365 + yıl/4;&lt;br /&gt;&lt;br /&gt;/* bu yildaki aylardaki gunleri ekle */&lt;br /&gt;&lt;br /&gt;if (ay==2)&lt;br /&gt;gt = gt + 31 ;&lt;br /&gt;else if (ay ==3)&lt;br /&gt;gt = gt + 31 + 28 ;&lt;br /&gt;else if (ay ==4)&lt;br /&gt;gt = gt + 31 + 28 +31;&lt;br /&gt;else if (ay ==5)&lt;br /&gt;gt = gt + 31 + 28 +31+ 30 ;&lt;br /&gt;else if (ay ==6)&lt;br /&gt;gt = gt + 31 + 28 +31+ 30 +31;&lt;br /&gt;else if (ay ==7)&lt;br /&gt;gt = gt + 31 + 28 +31+ 30 +31+ 30 ;&lt;br /&gt;else if (ay ==8)&lt;br /&gt;gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31 ;&lt;br /&gt;else if (ay ==9)&lt;br /&gt;gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 ;&lt;br /&gt;else if (ay ==10)&lt;br /&gt;gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 + 31;&lt;br /&gt;else if (ay ==11)&lt;br /&gt;gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 + 31+ 30 ;&lt;br /&gt;else if (ay ==12)&lt;br /&gt;gt = gt + 31 + 28 +31+ 30 +31+ 30 + 31+30 + 31+ 30 +31;&lt;br /&gt;&lt;br /&gt;/*Bu ayı ekle */&lt;br /&gt;gt = gt+ gun;&lt;br /&gt;if(yıl%4==0 &amp;&amp; ay&gt;2),&lt;br /&gt;gt =gt+1;&lt;br /&gt;gt=gt %7,&lt;br /&gt;if(gt==1)&lt;br /&gt;printf(“Pazar”);&lt;br /&gt;else if(gt==2)&lt;br /&gt;printf(“Pazartesi”);&lt;br /&gt;else if(gt==3)&lt;br /&gt;printf(“Salı”);&lt;br /&gt;else if(gt==4)&lt;br /&gt;printf(“Carsamba”);&lt;br /&gt;else if(gt==5)&lt;br /&gt;printf(“Persembe”);&lt;br /&gt;else if(gt==6)&lt;br /&gt;printf(“Cuma”);&lt;br /&gt;else if(gt==7)&lt;br /&gt;printf(“Cumartesi”);&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-2121720426965478235?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/2121720426965478235/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=2121720426965478235' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/2121720426965478235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/2121720426965478235'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2007/12/c-ye-giris-yapalm.html' title='C ye giris yapalım'/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-5039829117252362168</id><published>2007-12-02T06:57:00.000-08:00</published><updated>2008-10-13T12:58:39.748-07:00</updated><title type='text'></title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-5039829117252362168?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/5039829117252362168/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=5039829117252362168' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/5039829117252362168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/5039829117252362168'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2007/12/blog-post.html' title=''/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5415261736344872625.post-4382181771604370760</id><published>2007-12-02T06:36:00.000-08:00</published><updated>2008-10-13T12:58:39.748-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c kütükler'/><category scheme='http://www.blogger.com/atom/ns#' term='c de Kütüklerin Kullanımı c de kütükler'/><title type='text'>c de Kütüklerin Kullanımı</title><content type='html'>&lt;strong&gt;Kütüklerin Kullanımı&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt;Bir kütüğü kullanmadan önce iki işlemim yapılması germektedir. Kütük ile ilgili işaretçinin tanımlanması ve kütüğün açılması.&lt;br /&gt;&lt;br /&gt;Tanımlı FILE tipinde işaretçi değişken tanımlayarak ilk işlem gerçekleştirilir.&lt;br /&gt;    FILE *kp;           /*FILE yapısı stdio.h içerisinde tanımlı */&lt;br /&gt;&lt;br /&gt;İkinci aşamada kütük açma deyimi kullanılır.&lt;br /&gt;    kp = fopen(kütük adı, mod) &lt;br /&gt;&lt;br /&gt;kütük adı : açmak istediğimiz kütüğün adı (string).  Büyük - küçük harf ayrımı yok.&lt;br /&gt;mod        : kullanım amacı (string). Okuma, yazma değişiklik ...&lt;br /&gt;&lt;br /&gt;   r :  okumak için&lt;br /&gt;   w : yazmak için. Kütük yok ise oluşturulur, var ise içeriği silinir. &lt;br /&gt;&lt;br /&gt;   a : eklemek için. Kütük yok ise oluşturulur , var ise sondan itibaren yazılır&lt;br /&gt;   r+ : Var olan bir kütüğü okumak ve yazmak için &lt;br /&gt;   w+ : Okumak ve yazmak için yeni bir kütük oluştur. Dosya var ise içeriği silinir.&lt;br /&gt;   a+ : Eklemek için. Okuma ve yazma yapılabilir. . Dosya yok ise oluşturulur..&lt;br /&gt;&lt;br /&gt;Örnek 12.1.1 : Kütüğe yazma&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;  FILE *kp;&lt;br /&gt;  char *s;&lt;br /&gt;  int i;&lt;br /&gt;&lt;br /&gt;  kp = fopen("dene", "w"); /* NULL ise işlem başarısız */&lt;br /&gt;  if (kp == NULL)&lt;br /&gt;     exit(1);&lt;br /&gt;&lt;br /&gt;  for (i=0; i&lt;5; i++) {&lt;br /&gt;      gets(s);&lt;br /&gt;      fprintf(kp, "%s\n", s);&lt;br /&gt;  }&lt;br /&gt;  getch();&lt;br /&gt;  fclose(kp);  /* kütüğü kapatır. Program sona erdiğinde otomatik kapatılır */&lt;br /&gt;   /* fcloseall() hepsini kapatır. Dönen , kapanan kütük sayısı.  Hata var ise EOF döner&lt;br /&gt;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Yazarken kullanılan fprintf deyiminin çalışması printf gibidir. Sadece ilk parametre olarak kütük değişkenini vermek gerekir.&lt;br /&gt;&lt;br /&gt;Benzer kütük işlevleri&lt;br /&gt;&lt;br /&gt;int fgetc(FILE *stream);&lt;br /&gt;int fputc(int c, FILE *stream);&lt;br /&gt;char *fgets(char *s, int n, FILE *stream);    n-1 karakter veya satır sonuna kadar okur&lt;br /&gt;int fputs(const char *s, FILE *stream);         satır sonu bilgisini ayrıca yazmak gerekir&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 12.1.2: Kütükten okuma&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;  FILE *kp;&lt;br /&gt;  char *s;&lt;br /&gt;  int i;&lt;br /&gt;&lt;br /&gt;  kp = fopen("dene", "r");&lt;br /&gt;  if (kp == NULL)&lt;br /&gt;     exit(1);&lt;br /&gt;&lt;br /&gt;  clrscr();&lt;br /&gt;  for (i=0; i&lt;5; i++) {&lt;br /&gt;      fscanf(kp, "%s", s);&lt;br /&gt;      printf("%s\n", s);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /* Kütükteki kayıt sayısı bilimiyor ise */&lt;br /&gt;  rewind(kp);&lt;br /&gt;  /*   fseek(stream, 0L, SEEK_SET)&lt;br /&gt;                         SEEK_SET 0 baştan&lt;br /&gt;                         SEEK_CUR 1 bulunulan yerden&lt;br /&gt;                         SEEK_END 2 sondan&lt;br /&gt;  */&lt;br /&gt;  fscanf(kp, "%s", s);&lt;br /&gt;  while (!feof(kp)) {&lt;br /&gt;      printf("%s\n", s);&lt;br /&gt;      fscanf(kp, "%s", s);&lt;br /&gt;  }&lt;br /&gt;  getch();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int feof(FILE *) : kütüğün sonuna erişilmiş ise sıfırdan farklı bir değer alır. Aksi halde sıfırdır.&lt;br /&gt;rewind(FILE *) : kütük işaretçisinin (kütükteki hangı kayıdın okunacağı bilgisi) kütüğün başını göstermesini           sağlar.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 12.1.3: Ekleme ve okuma&lt;br /&gt;&lt;br /&gt;a+ modunda kütük aç. + eklenmez ise kütük işaretçisi kütük başına taşınmıyor&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;  FILE *kp;&lt;br /&gt;  char *s;&lt;br /&gt;  int i;&lt;br /&gt;&lt;br /&gt;  kp = fopen("dene", "a+");&lt;br /&gt;  if (kp == NULL)&lt;br /&gt;     exit(1);&lt;br /&gt;&lt;br /&gt;  clrscr();&lt;br /&gt;  for (i=0; i&lt;2; i++) {&lt;br /&gt;      gets(s);&lt;br /&gt;      fprintf(kp, "%s\n", s);&lt;br /&gt;  }&lt;br /&gt;  rewind(kp);&lt;br /&gt;  fscanf(kp, "%s", s);&lt;br /&gt;  while (!feof(kp)) {&lt;br /&gt;      printf("%s\n", s);&lt;br /&gt;      fscanf(kp, "%s", s);&lt;br /&gt;      getch();&lt;br /&gt;  }&lt;br /&gt;  getch();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 12.1.4: Matrisin elemanlarının değerlerinin kütükten öğrenilmesi.&lt;br /&gt;   kütüğün ismi  matrisa.dat&lt;br /&gt;   matris elemanları double&lt;br /&gt;   boyut 4x3&lt;br /&gt;&lt;br /&gt;#define SAT 4&lt;br /&gt;#define SUT 3&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;  FILE *kp;&lt;br /&gt;  double a[SAT][SUT];&lt;br /&gt;  int i, j;&lt;br /&gt;&lt;br /&gt;  kp = fopen("matrisa.dat", "r");&lt;br /&gt;  if (kp == NULL)&lt;br /&gt;     exit(1);&lt;br /&gt;&lt;br /&gt;  for (i=0; i&lt;SAT; i++)&lt;br /&gt;      for (j=0; j&lt;SUT; j++)&lt;br /&gt;   fscanf(kp, "%lf", &amp;a[i][j]);&lt;br /&gt;&lt;br /&gt;  clrscr();&lt;br /&gt;&lt;br /&gt;  for (i=0; i&lt;SAT; i++) {&lt;br /&gt;      for (j=0; j&lt;SUT; j++)&lt;br /&gt;   printf("%8.1f", a[i][j]);&lt;br /&gt;      printf("\n");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  getch();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 12.1.5:  Hesaplanan değerlerin kütüğe yazdırılması.&lt;br /&gt;1-exp(-x) fonksiyonu 0-10 aralığında 0.02 adımlarla hesaplanıp kütüğe yazılıyor&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;math.h&gt;&lt;br /&gt;&lt;br /&gt;#define ADIM 0.02&lt;br /&gt;#define T0   0&lt;br /&gt;#define TS   10&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;  FILE *kp;&lt;br /&gt;  double f, t;&lt;br /&gt;&lt;br /&gt;  kp = fopen("sonuc.dat", "w");&lt;br /&gt;  if (kp == NULL)&lt;br /&gt;     exit(1);&lt;br /&gt;  for (t=T0; t&lt;TS; t = t + ADIM) {&lt;br /&gt;      f = 1 - exp(-t);&lt;br /&gt;      fprintf(kp, "%6.3f     %12.8f\n", t, f);&lt;br /&gt;      printf("%6.3f     %12.8f\n",t, f);&lt;br /&gt;  }&lt;br /&gt;  getch();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12.1.1 Text Kütükte Değişiklik&lt;br /&gt;&lt;br /&gt;Kütük işaretçisi değişiklik yapılacak kaydı göstermelidir. Ayrıca yeni bilgi eski bilgi ile aynı olmalıdır. Bu nedenle text kütüklerde değişiklik başvural bir şey değil. Gerektiği durumlarda kayıtlar geçici olarak başka bir kütüğe yazılır.&lt;br /&gt;&lt;br /&gt;int remove(const char *k_adi) : kütüğü siler&lt;br /&gt;int rename(const char *eski, const char *yeni) : kütüğün ismi değiştirilir&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örnek 12.1.6: Girilen dosyada herbir harfin kaçdefa geçtiğini bulup, çoktan aza doğru yazar.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;&lt;br /&gt;void degistir(int *, int *);&lt;br /&gt;&lt;br /&gt;main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  char dosyaadi[64];&lt;br /&gt;  FILE *fp;&lt;br /&gt;  char c;&lt;br /&gt;&lt;br /&gt;  long toplam = 0;&lt;br /&gt;  int frek[2][26] = {0,};&lt;br /&gt;  int i, j, k;&lt;br /&gt;&lt;br /&gt;  for (i=0; i&lt;26; i++)&lt;br /&gt;      frek[0][i] = 65 + i;&lt;br /&gt;&lt;br /&gt;  if (argc&lt;2) {&lt;br /&gt;     printf("Dosya adını belitmediniz\n");  &lt;br /&gt;     exit(1);     &lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;     strcpy(dosyaadi, argv[1]);&lt;br /&gt;&lt;br /&gt;  fp = fopen(dosyaadi, "r");&lt;br /&gt;&lt;br /&gt;  while (!feof(fp)) {&lt;br /&gt;     c = toupper(fgetc(fp));&lt;br /&gt;     if (c &gt;= 'A' &amp; c &lt;='Z' )&lt;br /&gt;  frek[1][c - 'A']++;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  for (i = 0; i &lt; 26; i++)&lt;br /&gt;       toplam = toplam + frek[1][i];&lt;br /&gt;&lt;br /&gt;  clrscr();&lt;br /&gt;  printf("İncelenen Dosya : %s\n", dosyaadi);&lt;br /&gt;  printf("Toplam harf     : %ld", toplam);&lt;br /&gt;&lt;br /&gt;  /* Çoktan aza doğru sırala */&lt;br /&gt;  do {&lt;br /&gt;     k = 0; /* bayrak */&lt;br /&gt;     for (i=0; i &lt; 25; i++)&lt;br /&gt;  if (frek[1][i] &lt; frek[1][i+1] ) {&lt;br /&gt;     k = 1;&lt;br /&gt;     degistir(&amp;frek[0][i], &amp;frek[0][i+1]);&lt;br /&gt;     degistir(&amp;frek[1][i], &amp;frek[1][i+1]);&lt;br /&gt;  }&lt;br /&gt;  } while (k == 1);&lt;br /&gt;&lt;br /&gt;  for (i = 0; i &lt; 26; i++) {&lt;br /&gt;      if (i&lt;13)&lt;br /&gt;  gotoxy(1, 5+ i);&lt;br /&gt;      else&lt;br /&gt;  gotoxy(40, 5 + i - 13);&lt;br /&gt;&lt;br /&gt;      printf("%c:  %6d  %5.3f",frek[0][i] , frek[1][i], (float)frek[1][i]/toplam);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;  getch();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void degistir(int *a, int *b)&lt;br /&gt;{&lt;br /&gt;  int c;&lt;br /&gt;  c  = *a;&lt;br /&gt;  *a = *b;&lt;br /&gt;  *b = c;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Örnek çıktı: (frekans classics.txt)&lt;br /&gt;&lt;br /&gt;İncelenen Dosya : classics.txt&lt;br /&gt;Toplam harf     : 122850&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;E:   14657  0.119                      M:    2870  0.023&lt;br /&gt;T:   10449  0.085                      F:    2630  0.021&lt;br /&gt;A:    9902  0.081                      P:    2440  0.020&lt;br /&gt;I:    9889  0.080                       Y:    2292  0.019&lt;br /&gt;S:    9504  0.077                      W:    2257  0.018&lt;br /&gt;O:    9492  0.077                      G:    2172  0.018&lt;br /&gt;N:    8521  0.069                      B:    1779  0.014&lt;br /&gt;R:    7706  0.063                      V:    1279  0.010&lt;br /&gt;H:    6215  0.051                      K:    1260  0.010&lt;br /&gt;L:    5333  0.043                      Z:     288  0.002&lt;br /&gt;D:    4463  0.036                      J:     236  0.002&lt;br /&gt;C:    3760  0.031                      X:     218  0.002&lt;br /&gt;U:    3121  0.025                      Q:     117  0.001&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;C DOSYALAMA&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;C nin dosyalama ile ilgili bir kac örnek&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;/*1-exp(-x) fonksiyonu 0-10 aralığında 0.002 adımlarla hesaplanıp kütüğe yazılması*/&lt;/strong&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include&lt;math.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;#include&lt;stdlib.h&gt;&lt;br /&gt;#define adim 0.002&lt;br /&gt;#define T0 0&lt;br /&gt;#define TS 10&lt;br /&gt;main(){&lt;br /&gt; FILE *fp;&lt;br /&gt; double f,t;&lt;br /&gt;&lt;br /&gt; if ((fp=fopen("sonuc.dat","w"))==NULL){&lt;br /&gt;  printf("Dosya a‡lamad\n");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; clrscr();&lt;br /&gt; for(t=T0;t&lt;TS;t=t+adim){&lt;br /&gt;  f=1-exp(-t);&lt;br /&gt;  fprintf(fp,"%6.3f %12.8f\n",t,f);&lt;br /&gt;  printf("%6.3f %12.8f\n",t,f);&lt;br /&gt; }&lt;br /&gt; getch();&lt;br /&gt; fclose(fp);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;strong&gt;d_getch ile örnek&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include&lt;dos.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;#include&lt;stdlib.h&gt;&lt;br /&gt;#define size 10&lt;br /&gt;main(){&lt;br /&gt; FILE *fp;&lt;br /&gt; int i;&lt;br /&gt; char a;&lt;br /&gt; char *s;&lt;br /&gt; if ((fp=fopen("data","r"))==NULL){&lt;br /&gt;  printf("Dosya kopyalanmadı\n");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; clrscr();&lt;br /&gt; printf("Okunacak hafiza noyu girin=");&lt;br /&gt; scanf ("%d\n",&amp;i);&lt;br /&gt; fseek(fp,i,0);&lt;br /&gt; i=fgetc(fp);&lt;br /&gt; printf("%c\n",i);&lt;br /&gt; fclose(fp);&lt;br /&gt;&lt;br /&gt;getch();&lt;br /&gt;}&lt;br /&gt;--------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include&lt;math.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;#include&lt;stdlib.h&gt;&lt;br /&gt;#define MAX_LINE 126&lt;br /&gt;#define T0 0&lt;br /&gt;#define TS 10&lt;br /&gt;&lt;br /&gt;void main(){&lt;br /&gt; FILE *fp;&lt;br /&gt; char *s[80];&lt;br /&gt; int t;&lt;br /&gt; if ((fp=fopen("test","w"))==NULL){&lt;br /&gt;  printf("dosya a‡lamad..\n");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; clrscr();&lt;br /&gt; printf("bir string ve intger de§er girin\n");&lt;br /&gt; scanf("%s %d",s,&amp;t);&lt;br /&gt; fprintf(fp,"%s %d",s,t);&lt;br /&gt; fclose(fp);&lt;br /&gt; if((fp=fopen("test","r"))==NULL){&lt;br /&gt;  printf("ktk a‡lamad");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; fscanf(fp,"%s %d",s,&amp;t);&lt;br /&gt; printf("%s %d",s,t);&lt;br /&gt; fclose(fp);&lt;br /&gt; getch();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include&lt;dos.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;#include&lt;stdlib.h&gt;&lt;br /&gt;#define size 10&lt;br /&gt;main(){&lt;br /&gt; int p[size]={10,2,56,80,-2,23,80,21,-4,40};&lt;br /&gt; FILE *fp;&lt;br /&gt; int max,k,i;&lt;br /&gt; if ((fp=fopen("data","w"))==NULL){&lt;br /&gt;  printf("Dosya a‡lamad\n");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; clrscr();&lt;br /&gt; fprintf(fp,"sayilar:\n");&lt;br /&gt; for(k=0;k&lt;size;k++)&lt;br /&gt;  fprintf(fp,"%d\n",p[k]);&lt;br /&gt; max=p[0];&lt;br /&gt; for (k=1;k&lt;size;k++){&lt;br /&gt;  if (p[k]&gt;max)&lt;br /&gt;   max=p[k];&lt;br /&gt; }&lt;br /&gt; fprintf(fp,"enbyk say:%d\n",max);&lt;br /&gt;&lt;br /&gt; fclose(fp);&lt;br /&gt;&lt;br /&gt;getch();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include&lt;dos.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;#include&lt;stdlib.h&gt;&lt;br /&gt;#define size 10&lt;br /&gt;main(){&lt;br /&gt; FILE *fp;&lt;br /&gt; char *s;&lt;br /&gt; int i;&lt;br /&gt; if ((fp=fopen("data","r"))==NULL){&lt;br /&gt;  printf("Dosya a‡lamad\n");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; clrscr();&lt;br /&gt;&lt;br /&gt; for(i=0;i&lt;13;i++) {&lt;br /&gt;  fscanf(fp,"%s",s);&lt;br /&gt;  printf("%s\n",s);&lt;br /&gt; }&lt;br /&gt; fclose(fp);&lt;br /&gt;&lt;br /&gt;getch();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;strong&gt;Örnek:&lt;/strong&gt;dosya ekleme&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include&lt;dos.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;#include&lt;stdlib.h&gt;&lt;br /&gt;#define size 10&lt;br /&gt;main(){&lt;br /&gt; FILE *fp;&lt;br /&gt; int i;&lt;br /&gt; char *s;&lt;br /&gt; if ((fp=fopen("data","a+"))==NULL){&lt;br /&gt;  printf("Dosya a‡lamad\n");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; clrscr();&lt;br /&gt; for(i=0;i&lt;2;i++){&lt;br /&gt;  gets(s);&lt;br /&gt;  fprintf(fp,"%s\n",s);&lt;br /&gt; }&lt;br /&gt; rewind(fp);&lt;br /&gt; fscanf(fp,"%s",s);&lt;br /&gt; while(!feof(fp)){&lt;br /&gt;  printf("%s\n",s);&lt;br /&gt;  fscanf(fp,"%s",s);&lt;br /&gt;  getch();&lt;br /&gt; }&lt;br /&gt; fclose(fp);&lt;br /&gt;&lt;br /&gt;getch();&lt;br /&gt;}&lt;br /&gt;-------------------------------------------------------------------------&lt;br /&gt;&lt;strong&gt;Örnek:&lt;/strong&gt; fgets ve puts ile ilgili örnek&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include&lt;math.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;#include&lt;stdlib.h&gt;&lt;br /&gt;#define MAX_LINE 126&lt;br /&gt;#define T0 0&lt;br /&gt;#define TS 10&lt;br /&gt;&lt;br /&gt;void main(){&lt;br /&gt; FILE *fp;&lt;br /&gt; char s[80];&lt;br /&gt; int t;&lt;br /&gt; if ((fp=fopen("test","w"))==NULL){&lt;br /&gt;  printf("dosya a‡lamad..\n");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; clrscr();&lt;br /&gt; scanf("%s ",s);&lt;br /&gt; fputs(s,fp);&lt;br /&gt;       /* fprintf(fp,"%s %d",s,t);*/&lt;br /&gt; fclose(fp);&lt;br /&gt; if((fp=fopen("test","r"))==NULL){&lt;br /&gt;  printf("ktk a‡lamad");&lt;br /&gt;  exit(1);&lt;br /&gt; }&lt;br /&gt; fgets(s,3,fp);&lt;br /&gt; printf("%s ",s);&lt;br /&gt; fclose(fp);&lt;br /&gt; getch();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;&lt;strong&gt;Örnek&lt;/strong&gt;:random atama&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include&lt;math.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;#include&lt;stdlib.h&gt;&lt;br /&gt;#include&lt;errno.h&gt;&lt;br /&gt;#define MAX 10&lt;br /&gt;typedef struct{&lt;br /&gt; char no[11];&lt;br /&gt; int notu;&lt;br /&gt;}ogryapi;&lt;br /&gt;&lt;br /&gt;FILE *kp;&lt;br /&gt;ogryapi ogr;&lt;br /&gt;&lt;br /&gt;void giris(void) ;&lt;br /&gt;void liste(void);&lt;br /&gt;&lt;br /&gt;void main(){&lt;br /&gt; int i;&lt;br /&gt; char c;&lt;br /&gt; kp=fopen("ogr.dat","r+");&lt;br /&gt; if (kp==NULL){&lt;br /&gt;  printf("dosya a‡lamad..\n");&lt;br /&gt;  kp=fopen("dizi.dat","w+");&lt;br /&gt; }&lt;br /&gt; do{&lt;br /&gt; clrscr();&lt;br /&gt; fseek(kp,0,2);&lt;br /&gt; printf("dosya uzunlugu %ld\n" ,ftell(kp));&lt;br /&gt; printf("Kayt says %d\n\n", ftell(kp)/sizeof(ogryapi));&lt;br /&gt;&lt;br /&gt; printf("1-giris\n2-liste\n3-cikis\n");&lt;br /&gt; c=getch();&lt;br /&gt; switch(c){&lt;br /&gt;  case '1': giris(); break;&lt;br /&gt;  case '2':liste(); break;&lt;br /&gt;  case '3':exit(0);&lt;br /&gt; };&lt;br /&gt; }while(1);&lt;br /&gt; }&lt;br /&gt; void giris(void){&lt;br /&gt;  int i;&lt;br /&gt;  clrscr();&lt;br /&gt;  printf("™grenci no:"); scanf("%s",ogr.no);&lt;br /&gt;  printf("Notu      :"); scanf("%d",&amp;ogr.notu);&lt;br /&gt;  i=atoi(ogr.no);/*string tipi degiskenin tipini tam sayisal tipe d”nstrr*/&lt;br /&gt;  fseek(kp,(i-1)*sizeof(ogryapi),0);&lt;br /&gt;  fwrite(&amp;ogr,sizeof(ogryapi),1,kp);&lt;br /&gt;  fflush(kp); /* *int fflush(FILE*) tampon bellektekileri diske yazar*/&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt; void liste(void){&lt;br /&gt;  clrscr();&lt;br /&gt;  fseek(kp,0,0);&lt;br /&gt;  fread(&amp;ogr,sizeof(ogryapi),1,kp);&lt;br /&gt;  while(!feof(kp)){&lt;br /&gt;   /*fseek(kp,0,0);*/&lt;br /&gt;   printf("%s %d\n",ogr.no,ogr.notu);&lt;br /&gt;   fread(&amp;ogr,sizeof(ogryapi),1,kp);&lt;br /&gt;   /*printf("%s %d\n",ogr.no,ogr.notu);*/&lt;br /&gt;        }&lt;br /&gt;  getch();&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;--------------------------------------------------------------------------&lt;br /&gt;&lt;strong&gt;Örnek&lt;/strong&gt;: random 2 atama örnek&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include&lt;math.h&gt;&lt;br /&gt;#include&lt;conio.h&gt;&lt;br /&gt;#include&lt;stdlib.h&gt;&lt;br /&gt;#define MAX 10&lt;br /&gt;&lt;br /&gt;FILE *kp;&lt;br /&gt;int a[MAX];&lt;br /&gt;&lt;br /&gt;void giris(void) ;&lt;br /&gt;void liste(void);&lt;br /&gt;&lt;br /&gt;void main(){&lt;br /&gt; int i;&lt;br /&gt; char c;&lt;br /&gt; kp=fopen("dizi.dat","r+");&lt;br /&gt; if (kp==NULL){&lt;br /&gt;  printf("dosya a‡lamad..\n");&lt;br /&gt;  kp=fopen("dizi.dat","w+");&lt;br /&gt; }&lt;br /&gt; do{&lt;br /&gt; clrscr();&lt;br /&gt; fseek(kp,0,2);&lt;br /&gt; printf("dosya uzunlugu %ld\n" ,ftell(kp));&lt;br /&gt; printf("1-giris\n2-liste\n3-cikis\n");&lt;br /&gt; c=getch();&lt;br /&gt; switch(c){&lt;br /&gt;  case '1': giris(); break;&lt;br /&gt;  case '2':liste(); break;&lt;br /&gt;  case '3':exit(0);&lt;br /&gt; };&lt;br /&gt; }while(1);&lt;br /&gt; }&lt;br /&gt; void giris(void){&lt;br /&gt;  int i;&lt;br /&gt;  clrscr();&lt;br /&gt;  for(i=0;i&lt;MAX;i++)&lt;br /&gt;   a[i]=rand()%100;&lt;br /&gt;  fseek(kp,0,0);&lt;br /&gt;  fwrite(a,sizeof(int),MAX,kp);&lt;br /&gt; }&lt;br /&gt; void liste(void){&lt;br /&gt;  int i;&lt;br /&gt;  clrscr();&lt;br /&gt;  fseek(kp,0,0);&lt;br /&gt;  fread(a,sizeof(int),MAX,kp);&lt;br /&gt;  for (i=0;i&lt;MAX;i++)&lt;br /&gt;   printf("%d\n ", a[i]);&lt;br /&gt;  printf("\n");&lt;br /&gt;  getch();&lt;br /&gt; }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5415261736344872625-4382181771604370760?l=c-programlari.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c-programlari.blogspot.com/feeds/4382181771604370760/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5415261736344872625&amp;postID=4382181771604370760' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/4382181771604370760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5415261736344872625/posts/default/4382181771604370760'/><link rel='alternate' type='text/html' href='http://c-programlari.blogspot.com/2007/12/ktklerin-kullanm-bir-kt-kullanmadan-nce.html' title='c de Kütüklerin Kullanımı'/><author><name>murat2</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
