Dosyalardan Okuma: fscanf() ve fgets() Fonksiyonları
fscanf() fonksiyonu, scanf() fonksiyonuna benzer, ancak kullanıcıdan girdi almak yerine dosyadan biçimlendirilmiş veri okur.
fgets() fonksiyonu ise, dosyadan bir satır metni okur. scanf() fonksiyonundan daha güvenlidir, çünkü arabellek taşmasını önler.
fscanf() Fonksiyonu
Sözdizimi:
int fscanf(FILE*dosya_isaretcisi,constchar*format,...);
dosya_isaretcisi: Okunacak dosyanın işaretçisi.
format: Okuma formatı (scanf() gibi).
...: Okunacak değişkenlerin adresleri.
fscanf() fonksiyonu, dosyadan veri okurken format belirteçlerini kullanır. Dosyada belirtilen formata uygun bir veri bulursa, bu veriyi değişkenlere atar ve başarıyla okunan değişken sayısını döndürür.
Dosya sonuna ulaşırsa veya okuma hatası oluşursa, EOF değerini döndürür.
Örnek: fscanf() ile Dosyadan Okuma
#include <stdio.h>int main(){FILE*dosya = fopen("veri.txt","r");int sayi;if(dosya == NULL){ printf("Dosya açılamadı!\n");return1;}while(fscanf(dosya,"%d",&sayi)!= EOF){// Dosya sonuna kadar oku printf("Okunan sayı: %d\n", sayi);} fclose(dosya);return0;}
fgets() Fonksiyonu
Sözdizimi:
char*fgets(char*str,int n,FILE*stream);
str: Okunan metnin kaydedileceği karakter dizisi.
n: Okunacak maksimum karakter sayısı (null karakteri dahil).
EOF (End Of File - Dosya Sonu), dosya okuma fonksiyonları tarafından dosya sonuna ulaşıldığında döndürülen özel bir değerdir.
fgets() fonksiyonu, dosya sonuna ulaşırsa NULL döndürür.
fscanf() fonksiyonu, dosya sonuna ulaşırsa EOF döndürür.
Döngülerde dosya sonunu kontrol etmek için bu değerleri kullanırız.
Alıştırmalar
Kullanıcıdan adını ve yaşını alarak “isim.txt” adlı bir dosyaya yazan bir program yazın.
“sayilar.txt” adlı bir dosyada bulunan tam sayıları okuyarak toplamlarını hesaplayan ve ekrana yazdıran bir program yazın. Her satırda bir sayı olduğunu varsayın.
Klavyeden girilen metni “notlar.txt” adlı bir dosyaya yazan bir program yazın. Kullanıcı “çıkış” yazdığında program sonlansın ve dosya kapansın.
“ogrenciler.txt” adlı bir dosyada her satırda bir öğrenci adı olduğunu varsayarak, dosyadaki öğrenci sayısını bulan bir program yazın.
“veri.txt” adlı dosyanın ilk satırını okuyup ekrana yazdıran bir program yazın.