• 11-01-2007, 21:35:14
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    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;
    }
  • 11-01-2007, 21:37:22
    #2
    Üyeliği durduruldu
    return fscanf(fptr, ctrl, gun, ay, yil) == 3
    burda 3 e eşitlemiyor ç Eşitmi diye soruyor yani
    return 1 mi 0 mı. onu buluyor
    3 e bakma nedenide 1 ay 2 yıl 3 gün olması
  • 11-01-2007, 21:39:07
    #3
    Kafa dağınık da, tamam şimdi anladım orayı.

    const char *ctrl

    ne işe yarıyor acaba ?

    Bu arada teşekkürler SNaRe : )
  • 11-01-2007, 21:40:37
    #4
    Üyeliği durduruldu
    karakter tnaımlı ctrl yi sabitliyor. Hiçbir şekilde program içinde değişiklik yaptırmıyor onun üzerinde .
    const(constant)