Bildirim
int fprintf(FILE *stream, const char *format, ...);
int fprintf(FILE *restrict stream, const char *restrict format, ...); (C99)
int fprintf_s(FILE *restrict stream, const char *restrict format, ...); (C11)
Açıklama
Sonuçları akışa (stream) yazar.
Format parametresi ile gösterilen karakter dizisi içinde yer alan karakterleri normal bir şekilde, (%) işareti ile başlayan format tanımlayıcılarını ise tanımlanan her bir format tanımlayıcı için, format parametresinden sonra yer alan parametrelerden sıra ile değer okuyarak format karakter dizisini stream parametresi ile gösterilen dosya akışına yazar.
int fprintf (FILE *stream, const char *format, par1, par2, ...);
Kontrol dizisinin içinde hem normal karakterler hem de (%) işareti ile başlayan format tanımlayıcıları adı verilen ifadeler yer alabilir. printf() fonksiyonu " " işaretleri arasında yer alan normal karakterleri sıra ile dosya akışına yazar. Kontrol dizisi içinde yer alan her bir format tanımlayıcısı için par ifadesi ile gösterilen bir değer tanımlanır. Ancak, burada dikkat edilmesi gereken 2 önemli nokta vardır:
1. Kontrol dizisi içinde yer alan format tanımlayıcısı kadar par ifadesi ile gösterilen argüman tanımlanmalıdır.
2. Her argümanın veri türü kendisine karşılık gelen format tanımlayıcısının veri türüne uygun olmalıdır.
par ifadesi ile gösterilen argümanlar bir değişken, sabit, ifade veya bir fonksiyon çağrısı olabilir.
Fonksiyon çalışmaya başladığında, önce kontrol dizisi içinde yer alan ilk karaktere bakar. Eğer normal bir karakter ise doğrudan dosya akışına yazar. Eğer bir format tanımlayıcısı ise, bu format tanımlayıcısına karşılık gelen ilk argüman değerini dosya akışına yazar. Kontrol dizisi içindeki bütün karakterleri sıra ile bu şekilde kontrol edip işlem yaptıktan sonra çalışması sona erer.
Format tanımlayıcıları kendilerine karşılık gelen argümanların dosya akışına nasıl yazılacağını belirler. printf() fonksiyonu format tanımlayıcıları ile karşılaştığında akışa farklı bir veri yazacağını ve bu verinin fprintf() fonksiyonu çağrılırken karakter dizisinden sonra tanımlanmış olan argüman değerlerinden sıra ile alınacağını anlar.
Printf_s() fonksiyonu aynı işlemleri yapar. Farklı olarak, çalışma zamanında aşağıdaki hatalar tespit edildiğinde, yüklenmiş olan kısıtlayıcı işlem fonksiyonu çağrılır:
Parametreler
stream: Karakter dizisinin yazılacağı akışı tanımlayan FILE nesnesi işaretçisidir.
format: Dosya akışına yazdırılacak olan bir karakter dizisidir.
Bu karakter dizisi dosya akışına yazılacak olan metni içerir. Karakter dizisi içinde normal karakterler veya % karakteri ile başlayan ve format karakter dizisinden sonra gelen parametreler ile doldurulacak olan format tanımlayıcıları yer alabilir.
Format tanımlayıcı genel yapısı : %[göstergeler][genişlik][.hassasiyet][uzunluk]format tanımlayıcısı
Bir format tanımlayıcısı toplam 6 farklı ifadeden oluşmaktadır. En baştaki % işareti ile en sonda yer alan format tanımlayıcı harfi mutlaka kullanılmalıdır. [] işaretleri arasında yer alan diğer dört ifade isteğe bağlı olarak kullanılır.
Format tanımlayıcısı | Karşılığı |
---|---|
c | Karakter |
d | signed int |
i | signed int |
e | Bilimsel gösterim |
E | Bilimsel gösterim |
f | Ondalıklı sayı |
g | e ve %f'den kısa olanı kullanır. |
G | E ve %f'den kısa olanı kullanır. |
o | unsigned 8'lik sayı |
s | Karakter dizisi |
u | unsigned int |
x | unsigned 16'lık sayı (Küçük harf) |
X | unsigned 16'lık sayı (Büyük harf) |
p | İşaretçi |
n | Karşılık gelen argüman ekrana yazılan karakterlerin sayısının atandığı int bir değeri gösteren bir işaretçi olmalıdır. |
% | % işaretini ekrana yazar. |
Gösterge | Karşılığı |
---|---|
- | Verilen alan genişliği içerisindeki değerleri sola yaslar. Ön tanımlı değer sağa yaslamadır. |
+ | Pozitif sayılar da dahil olmak üzere sonuç değerinin önüne artı veya eksi işareti (+ veya -) ekler. Ön tanımlı olarak, yalnızca negatif sayılar önüne - işareti konur. |
Boşluk karakteri | Hiçbir işaret yazılmayacaksa, değerden önce bir boşluk eklenir. |
# | o, x veya X format tanımlayıcıları ile kullanıldığında, sıfırdan farklı değerler için değerlerin önüne sırasıyla 0, 0x veya 0X ifadeleri konur. E, E ve f ile birlikte kullanıldığında, ondalık işaretinden sonra değer olmasa bile elde edilen değerin ondalık bir nokta içermesini sağlar. Ön tanımlı olarak, ondalık işaretinden sonra değer yoksa, herhangi bir ondalık basamağı yazılmaz. G veya g ile kullanıldığında, sonuç e veya E ile aynıdır, ancak takip eden sıfırlar kaldırılmaz. |
0 | Değerin sol tarafında yer alan boşluklar sıfır değeriyle doldurulur. |
Genişlik | Karşılığı |
---|---|
Sayı | Yazdırılacak minimum karakter sayısıdır. Yazdırılacak değer bu sayıdan daha kısaysa, sonuç boşluklarla doldurulur. Sonuç daha büyük olsa bile değer kesilmez. |
* | Genişlik, format karakter dizisinde belirtilmez, ancak biçimlendirilmesi gereken argümandan önce ek bir tamsayı değeri argümanı olarak belirtilir. |
Hassasiyet | Karşılığı |
---|---|
.sayı |
|
.* | Hassasiyet, format karakter dizisinde belirtilmez, ancak formatlanması gereken argümandan önce ek bir tamsayı değeri olarak belirtilir. |
uzunluk : İsteğe bağlı olarak tanımlanan bu değer okutulacak argümanın boyutunu gösterir. hh, h, l, ll, j, z, t, L değerlerinden biri kullanıldığında, karşılık gelen argümanın gösterdiği veri tipini değiştirir.
Uzunluk değeri | Format tanımlayıcısı | Okunacak değer |
---|---|---|
(Yok) | c | int |
s | char* | |
d, i | int | |
u, o, x, X | unsigned int | |
f, F, e, E, a, A, g, G | double | |
n | int* | |
p | void* | |
h | d, i | short |
u, o, x, X | unsigned short | |
n | short* | |
hh (C99) | d, i | signed char |
u, o, x, X | unsigned char | |
n | signed char* | |
j (C99) | d, i | intmax_t |
u, o, x, X | uintmax_t | |
n | intmax_t* | |
l | c | wint_t |
s | wchar_t* | |
d, i | long | |
u, o, x, X | unsigned long | |
f, F, e, E, a, A, g, G | double (C99) | |
n | long* | |
L | f, F, e, E, a, A, g, G | long double |
ll (C99) | d, i | long long |
u, o, x, X | unsigned long long | |
n | long long* | |
t (C99) | d, i | ptrdiff_t |
u, o, x, X | unsigned ptrdiff_t | |
n | ptrdiff_t* | |
z (C99) | d, i | signed size_t |
u, o, x, X | size_t | |
n | signed size_t* |
... : Format parametresi ile gösterilen karakter dizisinde yer alan ve % karakteri ile başlayan her bir format tanımlayıcı için, format karakter dizisinden sonra bir parametre tanımlanması gerekir.
Dönüş değeri
Fprintf() fonksiyonu dosya akışına yazılan karakter sayısını int bir değer olarak geri döndürür. Bir çıkış veya kodlama hatası meydana gelirse, negatif bir sayı geri döndürür.
Fprintf_s() fonksiyonu dosya akışına yazılan karakter sayısını int bir değer olarak geri döndürür. Eğer bir çıkış hatası, bir çalışma zamanı kısıt ihlal hatası veya bir kodlama hatası oluşursa negatif bir sayı geri döndürür.
Örnek
#include <stdio.h>
int main(void)
{
FILE *fp;
char cdizi[] = "Bilgisayar";
char gdizi[20];
int id;
float fd;
if ((fp = fopen ("dosya.txt", "w+")) == NULL) {
printf("Dosya açma hatası!");
exit(1);
}
fprintf(fp, "%s %d %.2f", cdizi, 21, 17.54);
rewind(fp);
fscanf(fp, "%s %d %f", gdizi, &id, &fd);
printf("%s %d %.2f", gdizi, id, fd);
fclose(fp);
return 0;
}
Yukarıdaki örnekte, program aşağıdaki satırı ekrana yazar:
Bilgisayar 21 17.54
Yukarıdaki program, fprintf() fonksiyonu ile dosyaya yazdığı bir karakter dizisi, bir float değer ve bir int değeri, fscanf() fonksiyonu ile dosyadan okuyarak ekrana yazar.