Şimdi Ara

C Dosyalamada Bir Sorum Olacak

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
2
Cevap
0
Favori
436
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Öncelikle herkese iyi forumlar. C'de dosyalama üzerinde çalışıyorum fakat yapamadığım bir kısım var.Şöyle ki:

    Filmlerin isimlerini,kategorilerini,puanı ve yıllarını kullanıcıdan alıp dosyaya kaydediyorum ; fakat kullanıcıdan girdi almadan programın kendi içinden 1 den itibaren saymasını istiyorum.Örneğin:

    Film adı:Leon
    Kategori:Suc
    Yili:1994
    Puani:8.6

    diye girildiğinde programin oluşturduğu text dosyası:

    Leon Suc 1994 8,600000

    oluyor.
    Benim yapamadığım kısım ise kullanıcı her filmi girdiğinde bunun başına program 1 den başlayarak numara koyacak.Yani:

    1 Leon Suc 1994 8,600000
    2 Lucy Aksiyon 2014 6,400000
    3 .....

    Şu numara verme kısmını bir türlü yapamadım. Yardımlarınızı bekliyorum.Programın bir kısmı:

    #include <stdio.h> 
    #include <conio.h>
    #include <ctype.h>
    #include <stdlib.h>

    void ekle(void);
    void gor(void);
    FILE *fp;
    struct f
    {

    char adi[100];
    char turu[100];
    int yili;
    float puani;
    }film;


    void ekle(void)
    {
    printf("Film adi..:");
    scanf("%s",film.adi);
    printf("Filmin turu(leri)..:");
    scanf("%s",film.turu);
    printf("Filmin yili..:");
    scanf("%d",&film.yili);
    printf("Filmin puani..:");
    scanf("%f",&film.puani);
    fp=fopen("filmler.txt","a+");
    fprintf(fp,"\n%d\t%s\t%s\t%d\t%f\n",film.sirasi,film.adi,film.turu,film.yili,film.puani);
    if((fp=fopen("filmler.txt","r"))!=NULL)
    {
    printf("Film basari ile kaydedildi..");
    }
    else
    printf("HATA..!");
    fclose(fp);

    void gor(void)
    {
    fp=fopen("filmler.txt","r");
    fscanf(fp,"\n%s\t%s\t%d\t%f",film.adi,film.turu,&film.yili,&film.puani);
    printf("\nFilm adi./-/.Kategori./-/.Yili./-/.Puani\n%s\t%s\t%d\t%f\n",film.adi,film.turu,film.yili,film.puani);
    fclose(fp);
    }
    }







  • Teşekkür ederim cevapladığınız için kitaptan çalışıyorum da dosyalama konusunda paylaşılan örneğin bir kısmın paylaşayım sizle:

    #include <stdio.h> 
    #include <conio.h>
    #include <ctype.h>
    #include <stdlib.h>

    void dosac(void);
    void bilgigirisi(void);
    void tumliste(void);
    void yaz(void);

    struct ogrenci
    {
    char ad[20],soyad[20];
    int numara,notlar[10];
    char cinsiyet;
    };
    FILE *fp;
    struct ogrenci kayit;

    void dosac(void)//Genel dosya açma fonksiyonu
    {
    if((fp=fopen("ogrenci.txt","r+"))==NULL)
    {
    printf("Dosya Acilamadi\n");
    printf("Yeni dosya olusturuluyor..\n");
    fp=fopen("ogrenci.txt","w");
    fclose(fp);
    fp=fopen("ogrenci.txt","r+");
    }
    }

    void bilgigirisi(void)//Dosya bilgi girşi fonksiyonu
    {
    char ch;
    int i;
    dosac();
    fseek(fp,0L,2);
    do
    {
    printf("Adi..:");
    scanf("%s",kayit.ad);
    printf("Soyadi..:");
    scanf("%s",kayit.soyad);
    printf("Numara..:");
    scanf("%d",&kayit.numara);
    printf("Cinsiyet..:\n");
    kayit.cinsiyet=getch();
    for(i=1; i<=2; i++)
    {
    printf("%d.not..:\t",i);
    scanf("%d",&kayit.notlar[i]);
    }
    fwrite(&kayit,sizeof(struct ogrenci),1,fp);
    printf("Devam(E/H)");
    ch=getch();
    }
    while(toupper(ch)=='E');
    fclose(fp);
    }

    void yaz(void)//Dosyadan okunan yapı değişkeninin içeriği ekrana yazdırma fonksiyonu
    {
    int i;
    printf("\nAdi..:%s\n",kayit.ad);
    printf("Soyadi..:%s\n",kayit.soyad);
    printf("Numara..:%d\n",kayit.numara);
    printf("Cinsiyet..:%c\n",kayit.cinsiyet);
    for(i=1;i<=2;i++)
    {
    printf("%d.Not..:%d",i,kayit.notlar[i]);
    }
    getch();
    }

    void tumliste(void)//Dosyadaki tüm bilgilere ulaşımı ve listelenmesini sağlayan fonksiyon
    {
    int i;
    dosac();
    fseek(fp,0L,0);
    fread(&kayit,sizeof(struct ogrenci),1,fp);
    while(!feof(fp))
    {
    yaz();
    fread(&kayit,sizeof(struct ogrenci),1,fp);
    }
    fclose(fp);
    }


    Bu programa benzer kendimden bir şeyler katmak istedim ayrıca öğrenmek için malumunuz deneye deneye hataları göre göre öğreniyor insan.Beceremedim sizin gibi bu konudan daha iyi anlayanlara sormak istedim.
    Burada fwrite() ve fread() ile kullanmış. Bunların kullanış biçimini anlayamadım tam olarak. Başka yerlerden de araştırdım ; fakat bir türlü oturtamadım.Sanırsam "fwrite() ve fread" fonksiyonları yapı şeklinde kaydediyor ve yazıyor.fwrite() girilen bilgileri yani girdiğimiz bilgilerin hepsini grup olarak yazıyor , fread() ile bunu database den grup şeklinde bulup okuyor(yanlışsam düzeltin lütfen ben bu şekilde anladım).




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.