C'de bir metin dosyasında bulunan tarihleri ayıklayan bir program var. Fakat dosya işlemleri konusunda zayıf olduğum için 1-2 yerini anlayamadım. Mesela

const char *ctrl = "%2u %*1[./-] %2u %*1[./-] %u %*[^ 0123456789]";
bu satırda const char *ctrl 'nin görevi nedir ?

return fscanf(fptr, ctrl, gun, ay, yil) == 3
bu satırda neden 3'e eşitledi ?

Programın tam hali :

#include <stdio.h>

int tarih_oku(FILE *fptr, unsigned *gun, unsigned *ay, unsigned *yil)
{
    const char *ctrl = "%2u %*1[./-] %2u %*1[./-] %u %*[^ 0123456789]";
    fscanf(fptr, "%*[^0123456789]");
    return fscanf(fptr, ctrl, gun, ay, yil) == 3;
}

void tarihleri_al(FILE *fptr)
{
    unsigned gun_ = 0, ay_ = 0, yil_ = 0;

    while(!feof(fptr))
        if (tarih_oku(fptr, &gun_, &ay_, &yil_))
            printf("Bulunan tarihler: %u/%u/%u\n", gun_, ay_, yil_);
}

int main(void)
{
    puts("Tarih okunuyor!");
    tarihleri_al(stdin);
        
    return 0;
}