Bu kısımda girdi olarak karakter alan işlevler açıklanmıştır. Bu kısımdaki dar yönlenimli akım işlevleri
stdio.h başlık dosyasında, geniş yönlenimli akım işlevleri ise
wchar.h başlık dosyasında bildirilmiştir.
Bu işlevler bir karakter girdisinde, dar yönlenimli ise bir int türünden değerle, geniş yönlenimli ise bir wint_t türünden bir değerle ya da EOF/WEOF özel değeri (genellikle -1) ile döner.
Dar yönlenimli akım işlevleri için, işlev sonucunu bir karakter olarak kullanmayı tasarlıyorsanız bile, bu işlevlerin sonucunun char türü yerine int türünden bir değişkene atanması önemlidir. EOF değerinin char türünden bir değişkene atanması onun bir karakterlik boyuta indirilmesine sebep olur ki bu durumda artık geçerli bir karakterden ((char) -1) farkı kalmaz. Öyleyse, getc ve arkadaşlarını daima int türünden bir değişkene atayarak çağırmalı ve dönen değerin EOF olup olmadığına bakmalısınız. Dönen değer EOF değilse artık onu bir char türünden değişkene bilgi kaybı olmadan atayabilirsiniz.
Bu işlev akım’daki sonraki karakteri bir unsigned char olarak okur ve değerini int türüne dönüştürerek döndürür. Bir dosya sonu durumunda ya da bir hata oluştuğunda hata yerine
EOF ile döner.
wint_t fgetwc | (FILE *akım) |
işlev
Bu işlev akım’daki sonraki geniş karakteri okur ve değerini döndürür. Bir dosya sonu durumunda ya da bir hata oluştuğunda hata yerine WEOF ile döner.
int fgetc_unlocked | (FILE *akım) |
işlev
fgetc_unlocked işlevi akımı dolaylı olarak kilitlememesi dışında fgetc işlevine eşdeğerdir.
wint_t fgetwc_unlocked | (FILE *akım) |
işlev
fgetwc_unlocked işlevi akımı dolaylı olarak kilitlememesi dışında fgetwc işlevine eşdeğerdir.
Bu işlev bir GNU oluşumudur.
Birçok sistemin daha hızlı olması için onu bir makro olarak gerçekleştirmesi dışında tamamen fgetc gibidir. Makrolar için genel kurala bir istisna olarak akım argümanını bir kereden fazla değerlendirebilmesi ona önem kazandırır. Genellikle getc işlevi tek bir karakterin okunması için kullanılacak en iyi işlevdir.
Birçok sistemin daha hızlı olması için onu bir makro olarak gerçekleştirmesi dışında tamamen fgetwc gibidir. Makrolar için genel kurala bir istisna olarak akım argümanını bir kereden fazla değerlendirebilmesi ona önem kazandırır. Genellikle getwc işlevi tek bir geniş karakterin okunması için kullanılacak en iyi işlevdir.
int getc_unlocked | (FILE *akım) |
işlev
getc_unlocked işlevi akımı dolaylı olarak kilitlememesi dışında getc işlevine eşdeğerdir.
wint_t getwc_unlocked | (FILE *akım) |
işlev
gewtc_unlocked işlevi akımı dolaylı olarak kilitlememesi dışında getwc işlevine eşdeğerdir.
Bu işlev bir GNU oluşumudur.
getchar işlevi getc işlevinin akım argümanına değer olarak stdin belirtilerek çağrılması ile eşdeğerdir. Yani bu işlev bir karakteri doğrudan standart girdiden okur.
getwchar işlevi getwc işlevinin akım argümanına değer olarak stdin belirtilerek çağrılması ile eşdeğerdir. Yani bu işlev bir geniş karakteri doğrudan standart girdiden okur.
int getchar_unlocked | (void) |
işlev
getchar_unlocked işlevi akımı dolaylı olarak kilitlememesi dışında getchar işlevine eşdeğerdir.
wint_t getwchar_unlocked | (void) |
işlev
getwchar_unlocked işlevi akımı dolaylı olarak kilitlememesi dışında getwchar işlevine eşdeğerdir.
Bu işlev bir GNU oluşumudur.
Aşağıda fgetc kullanarak girdi alan bir işlev örneği vardır. İşlev fgetc (stdin) yerine getc ya da getchar kullanarak da çalışırdı. Kod ayrıca geniş yönlenimli akım işlevleri için de aynı şekilde çalışırdı.
int
evet_mi_hayir_mi (const char *soru)
{
fputs (soru, stdout);
while (1)
{
int c, cevap;
/* Bir boşluk yazarak cevabı sorudan ayıralım. */
fputc (' ', stdout);
/* Satırdaki ilk karakteri okuyalım.
Bu cevap karakteri olmalı ama olmayabilir. */
c = tolower (fgetc (stdin));
answer = c;
/* Satırın kalanını iptal edelim. */
while (c != '\n' && c != EOF)
c = fgetc (stdin);
/* Yanıt geçerliyse uygun dönüşü yapalım. */
if (cevap == 'y')
return 1;
if (cevap == 'n')
return 0;
/* Cevap geçersiz: Geçerli cevabı almaya çalışalım. */
fputs ("Cevabınız e ya da h olmalı: ", stdout);
}
}
Bu işlev bir sözcüğü (
int türünde)
akım’dan okur. SVID ile uyumluluk için vardır, ancak bunun yerine
fread kullanmanız önerilir. Bkz.
Blok Girişi ve Çıkışı.
getc işlevinin tersine herhangi bir
int türünden değer geçerli bir sonuç olmalıydı. İşlev bir hata oluştuğunda ya da dosya sonu saptandığında
EOF ile döner, ancak -1 değerini bir geçerli sözcükten ayırmak için bir yol yoktur.