folder Tahribat.com Forumları
linefolder C - C++
linefolder C De Böyle Bir Şey Mümkün Mü ?



C De Böyle Bir Şey Mümkün Mü ?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    zeybekustasi
    zeybekustasi's avatar
    Kayıt Tarihi: 24/Mayıs/2012
    Erkek

    abc türünde yapi tipinde dizi tanimladim. doğrudan erişimli dosyadan okuduğum her veriyi yapıda dizide ayrı bölgelerde sıralı tutmak istiyorum. ama request for member... hatasi veriyor. deitelde bununla ilgili bir örnek yok. yaptığım mantıklı değil mi hata neden kaynaklanıyor ?

     

    #include <stdio.h>
    #include <stdlib.h>
    struct ogrenci_Bilgisi
    {
        int ogr_no;
        char adsoyad[30];
        int sinif;
        int al_kredi;
        float ortalama;
    };
    typedef struct ogrenci_Bilgisi Bilgi;
    
    int main()
    {   FILE *aptr;
        Bilgi abc[10];
    
        if((aptr=fopen("ogrenciler.dat","r"))==NULL)
            printf("Dosya Acilamadi\n");
        else
        {   while (!feof(aptr))
        {
            fread(abc,sizeof(Bilgi),1,aptr);
        }
        printf("%s %d %d %d %d",abc.adsoyad,abc.al_kredi,abc.ogr_no,abc.ogr_no,abc.ortalama,abc.sinif);
    
        }
    
        return 0;
    }

    https://www.youtube.com/watch?v=WC3-71NKwPw
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NmC
    NmC's avatar
    Kayıt Tarihi: 23/Kasım/2008
    Erkek

    Hocam emin değilim ama fread pointer'ı kaydırıyor mu? yoksa sürekli abc array'inin ilk elemanına yazıyomuşssun gibi geliyor bana. Bi de ekrana basarken abc[0].ad,abc[0].soyad gibi bastırmayı deneyebilir misin?

    Ayrıca nickini görünce aklıma geldi, hala gönderemedim senin kargoyu hocam hafta içi fırsatım olursa göndereyim. Aynı adrestesin di mi?


    There are 10 types of people in the world. Those who knows binary and those who dont...
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    zeybekustasi
    zeybekustasi's avatar
    Kayıt Tarihi: 24/Mayıs/2012
    Erkek
    NmC bunu yazdı

    Hocam emin değilim ama fread pointer'ı kaydırıyor mu? yoksa sürekli abc array'inin ilk elemanına yazıyomuşssun gibi geliyor bana. Bi de ekrana basarken abc[0].ad,abc[0].soyad gibi bastırmayı deneyebilir misin?

    Ayrıca nickini görünce aklıma geldi, hala gönderemedim senin kargoyu hocam hafta içi fırsatım olursa göndereyim. Aynı adrestesin di mi?

    Printf içini dediğin gibi yaptım mesela [0] yaptım doğru okudu ama 1 yapınca okumadı &abc kısmını değiştirmem gerek ama nasıl ??

    edit// 0 yazıncada dosyanın en sonundaki elemanı yazdı ilkini değil yani.

    edit2//

    fread(&abc[0],sizeof(Bilgi),1,aptr);
    fread(&abc[1],sizeof(Bilgi),1,aptr);

    yapınca doğru şekilde doğru okudu demmekki böyleymiş bir şey idaha deneme yanılma ile buldum :)

    zeybekustasi tarafından 22/Mar/13 03:36 tarihinde düzenlenmiştir

    https://www.youtube.com/watch?v=WC3-71NKwPw
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NmC
    NmC's avatar
    Kayıt Tarihi: 23/Kasım/2008
    Erkek
    zeybekustasi bunu yazdı
    NmC bunu yazdı

    Hocam emin değilim ama fread pointer'ı kaydırıyor mu? yoksa sürekli abc array'inin ilk elemanına yazıyomuşssun gibi geliyor bana. Bi de ekrana basarken abc[0].ad,abc[0].soyad gibi bastırmayı deneyebilir misin?

    Ayrıca nickini görünce aklıma geldi, hala gönderemedim senin kargoyu hocam hafta içi fırsatım olursa göndereyim. Aynı adrestesin di mi?

    Printf içini dediğin gibi yaptım mesela [0] yaptım doğru okudu ama 1 yapınca okumadı &abc kısmını değiştirmem gerek ama nasıl ??

    edit// 0 yazıncada dosyanın en sonundaki elemanı yazdı ilkini değil yani.

    edit2//

    fread(&abc[0],sizeof(Bilgi),1,aptr);
    fread(&abc[1],sizeof(Bilgi),1,aptr);

    yapınca doğru şekilde doğru okudu demmekki böyleymiş bir şey idaha deneme yanılma ile buldum :)

    Hocam işte normalde 10 elemanlık yer almışsın ama her seferinde 1. elemana yazıyodun :) Çözümü kendin halletmişsin pointer aritmetiği ile farklı şekilde de çözülebilir while dışına

    Bilgi * x = abc;

    while(!feof(aptr)){

    fread(abc,sizeof(Bilgi),1,aptr);

    x  = x +sizeof(Bilgi);

    }

    daha sonra gene abc[0],abc[1] şeklinde okuyabilirsin.

     


    There are 10 types of people in the world. Those who knows binary and those who dont...
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Dosya sonunu feof ile denetlemeyin, fread'in dönen değerini kontrol edin. Bir de zaten 10'a 10'a okuyacağız, niçin fread'e doğrudan "Bilgi yapısının on katı kadar oku" demiyoruz? Sonuçta Bilgi adlı yapılar bellekte sıralı olarak duruyor.


    Olaylara karışmayın!
Toplam Hit: 2199 Toplam Mesaj: 5