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 />

printf("cannot open notlar.txt!\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

printf("notlar.txt dosyasi acildi!\n");<br />

fpass = fopen("gecen.txt", "w");<br />

if (fpass == NULL) {<br />

printf("gecen.txt dosyasi yaratilamiyor!\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

printf("gecen.txt dosyasi yaratildi!\n");<br />

ffail = fopen("kalan.txt", "w");<br />

if (ffail == NULL) {<br />

printf("kalan.txt dosyasi yaratilamiyor!\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

printf("kalan.txt dosyasi yaratildi!\n");<br />

while (fscanf(fgrades, "%s%s%d", name_entry, fname_entry, &grade) !=<br />

EOF) {<br />

if (grade >= PASS_GRADE) {<br />

fprintf(fpass, "%s %s %d\n", name_entry, fname_entry, grade);<br />

pass_counter++;<br />

}<br />

else {<br />

fprintf(ffail, "%s %s %d\n", name_entry, fname_entry, grade);<br />

fail_counter++;<br />

}<br />

}<br />

fprintf(fpass, "TOPLAM GECEN OGRENCI SAYISI = %d\n", pass_counter);<br />

fprintf(ffail, "TOPLAM KALAN OGRENCI SAYISI = %d\n", fail_counter);<br />

if (fcloseall() != 3) {<br />

printf("dosya kapatilamiyor!\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

}<br />

return 0;<br />

Programda her satırı rastgele bir isim soyisim ve not değerinden oluşan "notlar.txt" isimli<br />

bir dosya yaratılıyor. Daha sonra bu dosya okuma amacıyla açılarak, dosyanın her<br />

satırında bulunan isim ile soyisimler char türden dizilere, not değerleri ise int türden bir<br />

değişkene okunuyor. Okunan not değerinin PASS_GRADE değerinden yüksek olup<br />

olmamasına göre ilgili satır, yazma amacıyla açılmış "gecen.txt" ya da "kalan.txt" isimli<br />

dosyalara yazdırılıyor. Böylece "notlar.txt" dosyasından "gecen.txt" ve "kalan.txt" isimli<br />

iki farklı dosya oluşturuluyor.<br />

fscanf işlevinde kullanılan format karakterlerine ilişkin önemli bir ayrıntıya değinelim:<br />

Dosyadan yapılan her okumanın dönüştürülerek mutlaka bellekte bir alana yazılması<br />

zorunlu değildir. Boşluk karakterleriyle ayrılan bir karakter grubu bir yere atanmadan<br />

dosya tampon alanından çıkarılmak isteniyorsa, format karakter grubunda %<br />

karakterinden sonra '*' karakteri kullanılır. Örneğin bir metin dosyasında dosya konum<br />

göstericisinin gösterdiği yerde<br />

1376 ---------- 4567<br />

gibi bir satırın bulunduğunu düşünelim. Yapılacak okuma sonucunda yalnızca 1376 ve<br />

4567 değerlerinin x ve y değişkenlerine aktarılması gerektiğini düşünelim. Bunun için<br />

aşağıdaki gibi bir çağrı yapılabilir:<br />

461

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

Saved successfully!

Ooh no, something went wrong!