C programlama dili dosyadan veri okuma sorunu

Entelektüel Ayı

MB Üyesi
Kayıt
21 Nisan 2017
Mesajlar
5
Tepkiler
0
Yaş
27
Üniv
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.
 

Mücahit Arslan

Yetkili Kişi
Yönetici
Kayıt
13 Ekim 2016
Mesajlar
244
Tepkiler
99
Meslek
Yüksek Teknoloji Ar-Ge Mühendisi
Üniv
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>
}
 
Konu sahibi
Konu sahibi
E

Entelektüel Ayı

MB Üyesi
Kayıt
21 Nisan 2017
Mesajlar
5
Tepkiler
0
Yaş
27
Üniv
Selçuk
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>
}
Teşekkür ederim ama hiç aşina olmadığım kodlar açıkçası pek bir şey anlamadım, programı okulda anlatmam gerekiyor.
 
Konu sahibi
Konu sahibi
E

Entelektüel Ayı

MB Üyesi
Kayıt
21 Nisan 2017
Mesajlar
5
Tepkiler
0
Yaş
27
Üniv
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:
Yukarı Alt