C programlama dili dosyadan veri okuma sorunu

Konu, 'Genel Konular' kısmında Entelektüel Ayı tarafından paylaşıldı.

  1. Entelektüel Ayı

    Entelektüel Ayı MB Üyesi

    Kayıt:
    21 Nisan 2017
    Mesajlar:
    3
    Beğeniler:
    0
    En İyi Cevap:
    0
    Değerlendiriler:
    +0 / 0 / -0
    Üniversite:
    Selçuk
    C proje ödevimde öğrenci not giriş sistemi yapmam gerekiyor, not görüntüleme kısmında bir sorunla karşılaştım;
    Dosyadan struct ile veri okumak istiyorum fakat çalışmayı durdurdu hatası veriyor kodları denedim fscanf bölümünde sıkıntı var, dosyadan struct kullanarak nasıl veri okuyabilirim?
    Kod:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    struct ogrenci{
           int no;
           char *ad;
           int vize;
           int final;
    };
    int main(){
    FILE *dg = fopen("ogrenci.txt","r");
    struct ogrenci a;
    while (!feof(dg))
              {
      fscanf(dg,"%d %s %d %d",&a.no,a.ad,&a.vize,&a.final);
      printf("%d %s %d %d",a.no,a.ad,a.vize,a.final);
      }
        return 0;
    }
    ek olarak;
    Bir sonraki bölümde öğrencilerin notlarını girme/değiştirme işlemi yapmam gerekiyor. Aklımda dosyadan verileri alıp, matris diziye atayarak dizi üzerinde işlem yapıp, dosyayı sıfırladıktan sonra dosyaya yazdırma işlemi var. Yapmayı düşündüğüm bu işlemin dizi kullanmadan, dosya silip yeniden yazmadan daha kolay bir yöntemi vardır diye düşünüyorum.
    Dosya işlemleri hakkında pek bilgi sahibi değilim internette fazla türkçe kaynak bulamadım, bulduğum kadarıyla bir şeyler yapmaya çalışıyorum.
     
  2. Mücahit Arslan

    Mücahit Arslan Yetkili Kişi MB Yazarı

    Kayıt:
    13 Ekim 2016
    Mesajlar:
    187
    Beğeniler:
    77
    Meslek:
    Yüksek Teknoloji Ar-Ge Mühendisi
    En İyi Cevap:
    9
    Değerlendiriler:
    +105 / 2 / -1
    Üniversite:
    Staffordshire University
    Kardeşim bir de bunu dene bakalım açabilecek misin texti

    <code>#define CHUNK 1024/* read 1024 bytes at a time */
    char buf[CHUNK];FILE*file;size_t nread;

    file = fopen("ogrenci.txt","r");
    if(file){
    while((nread = fread(buf,1,sizeof buf, file))>0)
    fwrite(buf,1, nread, stdout);
    if(ferror(file)){
    /* deal with error */
    }
    fclose(file);}</code>
    }
     
  3. Entelektüel Ayı

    Entelektüel Ayı MB Üyesi

    Kayıt:
    21 Nisan 2017
    Mesajlar:
    3
    Beğeniler:
    0
    En İyi Cevap:
    0
    Değerlendiriler:
    +0 / 0 / -0
    Üniversite:
    Selçuk
    Teşekkür ederim ama hiç aşina olmadığım kodlar açıkçası pek bir şey anlamadım, programı okulda anlatmam gerekiyor.
     
  4. Entelektüel Ayı

    Entelektüel Ayı MB Üyesi

    Kayıt:
    21 Nisan 2017
    Mesajlar:
    3
    Beğeniler:
    0
    En İyi Cevap:
    0
    Değerlendiriler:
    +0 / 0 / -0
    Üniversite:
    Selçuk
    struct ogrenci{
    int no;

    char ad[20];
    int vize;
    int final;
    };

    struct içindeki ad değişkenini pointer'dan, diziye çevirdim sorun çözüldü fakat, dosya içindeki

    numara isim vize final
    1001 sedat_atli 15 50
    1002 meltem_ak 45 26
    1003 selim_isik 25 80
    1004 selin_gur 75 95

    şeklinde olan bilgilerin,
    1003 nolu öğrencinin vize notunu nasıl değiştirebilirim ?
    Aklımda dizi olarak alıp öyle değiştirmek vardı ama program çalışmayı durdurdu hatası veriyor, yine bir yerde hata yapıyorum ama bulamadım.


    char matris[10][4];

    while (!feof(dg))
    {
    struct ogrenci a;
    fscanf(dg,"%s %s %s %s",&a.no,a.ad,&a.vize,&a.final);
    matris[1]=a.no;
    matris[2]=a.ad;
    matris[3]=a.vize;
    matris[4]=a.final;


    printf("%s %s %s %s",matris[1],matris[2],matris[3],matris[4]);
    }

    Kodun değiştirdiğim yerlerini kalın yazı ile yazdım.
    bu şekilde alınca da çalışmayı durdurdu hatası alıyorum başka bir yolu var mı acaba ?
     
    Son düzenleme: 21 Nisan 2017