fprintf ve fscanf
- C kursu
- Orta seviye
- Ders 48/116
- 5 dk
fprintf ve fscanf ile dosyaya yazıp okumayı öğrenirsin.
fprintf ve fscanf
fprintf ve fscanf, dosyaya formatlı veri yazıp okumanın temel yoludur. printf ve scanf gibi çalışırlar; farkı ilk parametre olarak FILE* alırlar.
Örnek: fprintf(f, "%d %s\n", 25, "Ayşe"); dosyaya 25 Ayşe yazar. fscanf(f, "%d %s", &age, name); dosyadan bir tamsayı ve bir dize okur. Format belirticileri (%d, %s, %f) printf/scanf ile aynıdır. fscanf'te tamsayı için & (adres) şarttır; dize için gerekmez çünkü dize adı zaten işaretçidir.
Adres operatörü
fscanf ile tamsayı okurken & (adres) operatörü şarttır. Çünkü fscanf değeri değişkende saklamak için değişkenin adresine yazar. Dizelerde & gerekmez.
Örnek: int age; fscanf(f, "%d", &age);. Burada &age, age'in adresidir. fscanf bu adrese okunan değeri yazar. Ama char name[32]; fscanf(f, "%s", name);'te & yoktur; çünkü name zaten dizinin başlangıç adresidir. Bu ayrım, C'de işaretçi ve dizi ilişkisinin temelidir; unutulduğunda derleyici uyarı verir.
Uygulama Veri yaz, geri oku ve yazdır
FILE *f = fopen("data.txt", "w"); ile aç (NULL denetle). fprintf(f, "%d %s\n", 25, "Ayşe"); ile yaz, fclose(f);. f = fopen("data.txt", "r"); ile yeniden aç. int age; char name[32]; tanımla; fscanf(f, "%d %31s", &age, name); ile oku. fclose(f);. printf("%d %s\n", age, name); ile yazdır.
Başlangıç kodu
#include <stdio.h>
// fopen ile data.txt'yi yazma modunda aç
// fprintf ile 25 ve "Ayşe" yaz
// fclose, sonra okuma modunda yeniden aç
// fscanf ile oku, printf ile yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
int main(void) {
FILE *f = fopen("data.txt", "w");
if (f == NULL) return 1;
fprintf(f, "%d %s\n", 25, "Ayşe");
fclose(f);
f = fopen("data.txt", "r");
if (f == NULL) return 1;
int age;
char name[32];
fscanf(f, "%d %31s", &age, name);
fclose(f);
printf("%d %s\n", age, name);
return 0;
}Beklenen çıktı
25 Ayşe
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Fonksiyonları amacına eşle
| Kavram | Anlamı |
|---|---|
fprintf(f, ...) |
Dosyaya yazma |
fscanf(f, ...) |
Dosyadan okuma |
%d |
Tamsayı formatı |
%s |
Dize formatı |
2 Hangi fonksiyon dosyadan int okur?
- scanf
- fscanf(f, "%d", &x) Doğru cevap
- fgets
- fgetc
Açıklama: fscanf, FILE* parametresiyle dosyadan formatlı okur.
3 fscanf çağrısını tamamla
fscanf(f, "%d", &____);
fscanf(f, "%d", &age);
Açıklama: &age, age değişkeninin adresini verir.