C Dili Struct Yapısı

Merhabalar. Aşağıdaki yazdığım kodda hatalarım var. Hata ekran görüntüsünü de ekleyeceğim. Düzeltmeme yardım eder misiniz?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct alinan_not {
 char ortalama[50][1];
}alinan_not;
struct Ogrenci
{
char ad[15],soyad[15];
int numara,vizenotu,finalnotu;
}Ogrenci;
struct Ogrenci veri_al (ogrenciler){
printf("\nOgrencinin Adi:   ");
scanf("%s",&ogrenciler.ad);
printf("\nOgrencinin Soyadi:   ");
scanf("%s",&ogrenciler.soyad);
printf("\nOgrencinin Numarasi:   ");
scanf("%d",&ogrenciler.numara);
printf("\nOgrencinin Vize Notu:   ");
scanf("%d",&ogrenciler.vizenotu);
printf("\nOgrencinin Final Notu:   ");
scanf("%d",&ogrenciler.finalnotu);
return Ogrenci;

}
void dosyaya_yaz (dosya, ogrenciler , ogrenci_sayisi){
int i;
for(i=0;i<ogrenci_sayisi;i++){
fprintf(dosya,"%s\n%s\n%d",ogrenciler[i].ad,ogrenciler[i].soyad,ogrenciler[i].numara);
fprintf(dosya,"%d\n%d\n%d",ogrenciler[i].vizenotu,ogrenciler[i].finalnotu,alinan_not.ortalama[i][0]);
}
fclose(dosya);//dosyayı kapattık.
}
void main()
{
struct Ogrenci * ogrenciler;
int ogrenci_sayisi = 2;
char ismi[4];
//Programlama.txt dosyasını yazmak üzere açınız
FILE *dosya;
dosya = fopen("Programlama.txt","w");
// Ogrenci sayisi kadar “ogrenciler” için hafızada yer isteyiniz
ogrenciler =malloc( ogrenci_sayisi * sizeof(Ogrenci) );
for (int i = 0; i < ogrenci_sayisi; i++)
{
// Her öğrenci için veri_al fonksiyonunu çağırınız
printf("%d. Ogrencinin bilgilerini giriniz.\n",i);
veri_al(ogrenciler[i]);

// Her öğrencinin not ortalamalarını vize*0.4 + final*0.6 olarak hesaplayınız
alinan_not.ortalama[i]=ogrenciler[i].ad;
alinan_not.ortalama[i][0]=ogrenciler[i].vizenotu*0.4+ogrenciler[i].finalnotu*0.6;
}
dosyaya_yaz(dosya, ogrenciler, ogrenci_sayisi);
}

Önemli bi ayrıntıyı söylememişim, kodda belirtilen kalıbın dışına çıkamam.

Fonksiyon parametreleri (tur1 isim1, tur2 isim2) seklinde tanimlanmali, burada turler eksik.

Bu fonksiyonun amaci nedir? Ne yapacak? Bagli olarak:

Bu satir ne yapiyor veya yapmayi amacliyor?

Ayni sekilde bunun neyi dondurdugunu sormak istiyorum.

Fonksiyon deklarasyonlari duzelirse cogu sey aciga kavusacaktir.

Bunun disinda gozume carpanlar:

main’de acilan dosya dosyaya_yaz’da kapaniyor, ayni yerde olmalari lazim.
malloc’un dondurdugu deger kontrol edilmemis.
void main() standart degil ve tehlikeli: int main(void) veya int main(int argc, char *argv[]) tercih edilmeli.
Kodun daha cok yatay ve dikey bosluga ve hizlamaya ihtiyaci var. Çok var.

Evet bence de dediğiniz gibi olmalı. Ama ödevde verilen kalıbın dışına çıkamayacağım için müdahale edemiyorum.

Emin olmamakla beraber, öğrenci bilgilerini dışarıdan almam için gerekli kodları tutmam gerektiğini düşünüyorum.

Bunu düzelteceğim.

Bu da dediğim gibi değiştiremeyeceğim bi kalıp. Ama tehlikeli olma sebebini merak ettim.

Teşekkür ederim.

Noktalarla “doldurun” diye belirtilmis fonksiyon parametre alanina 1989 yilindan beri standart olan stilde parametre yazmak kalibin disina cikmak olmamali. Noktalari olmayan veri_al’a parametre eklemek daha yanlis gibi.

Bilgiler disaridan alinacaksa parametre neye yariyor?

Sentaks veya belirgin bir sekilde calisma esnasinda ortaya cikmayan her gizli hata tehlikeli. Dogrularin yanlis ogrenilmesine ve hatta yanlis ogretilmesine neden olabiliyorlar.

1 Beğeni