08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

fscanf(f, "%d%*s%d", &x, &y);<br />

fgets İşlevi<br />

char *fgets(char *buf, int n, FILE *f);<br />

Bu işlev dosya konum göstericisinin gösterdiği yerden bir satırlık bilgiyi okur. İşlev<br />

dosyadan '\n' karakterini okuyunca onu da birinci parametresinde verilen adrese yazarak<br />

işlemini sonlandırır.<br />

İşlevin birinci parametresi okunacak bilginin bellekte yerleştirileceği yerin adresidir. İkinci<br />

parametresi ise okunacak maksimum karakter sayısıdır. fgets işlevi en fazla n – 1<br />

karakteri okur. Okuduğu karakterlerin sonuna sonlandırıcı karakteri ekler ve işlemini<br />

sonlandırır. Eğer satır üzerindeki karakter sayısı n - 1'den az ise tüm satırı okur ve<br />

işlemini sonlandırır. Örneğin bu parametrenin 10 olarak girildiğini düşünelim. Satır<br />

üzerinde 20 karakter olsun. İşlev 9 karakteri okuyarak diziye yerleştirir, sonuna<br />

sonlandırıcı karakteri ekler. Ancak satır üzerinde \n dahil olmak üzere 5 karakter olsaydı<br />

işlev bu 5 karakteri de okuyarak sonuna da sonlandırıcı karakteri ekleyerek işlemini<br />

sonlandırırdı. İşlevin ikinci parametresine char türden bir dizinin ya da dinamik olarak<br />

elde edilen bir bloğun boyutunu geçmek taşma hatalarını doğrudan engeller. Zira fgets<br />

işlevi en fazla, dizinin boyutundan bir eksik sayıda karakteri okuyarak diziye yazar,<br />

dizinin son elemanına da sonlandırıcı karakterin değerini yazar.<br />

İşlevin geri dönüş değeri, en az 1 karakter okunmuş ise birinci parametresi ile belirtilen<br />

adresin aynısı, hiçbir karakter okunmamışsa NULL adresidir.<br />

Bir döngü içinde fgets işlevi sürekli olarak çağrılarak bütün dosya okunabilir.<br />

fgets işlevi ile bir dosyayı satır satır ekrana yazdıran aşağıdaki programı inceleyin:<br />

#include <br />

#include <br />

#define MAX_FILE_NAME_LEN 256<br />

#define BUFFER_SIZE 100<br />

int main()<br />

{<br />

FILE *f;<br />

char file_name[MAX_FILE_NAME_LEN];<br />

char buf[BUFFER_SIZE];<br />

printf("Dosya ismi : ");<br />

gets(file_name);<br />

if ((f = fopen(file_name, "r")) == NULL) {<br />

printf("cannot open the file %s\n", file_name);<br />

exit(EXIT_FAILURE);<br />

}<br />

while (fgets(buf, BUFFER_SIZE, f) != NULL)<br />

printf("%s", buf);<br />

fclose(f);<br />

}<br />

return 0;<br />

while (fgets(buf, BUFFER_SIZE, f) != NULL)<br />

printf("%s", buf);<br />

Döngüsüyle f ile gösterilen dosyadan satır satır okuma yapılarak okunan karakterler buf<br />

dizisine yazılıyor. Eğer dosyadan okunacak bir karakter kalmadıysa fgets işlevi NULL<br />

adresine geri döner.<br />

462

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!