Struct Yapısı

Serpenos

Kilopat
Katılım
15 Ağustos 2014
Mesajlar
3.257
Makaleler
2
Çözümler
5
Daha fazla  
Cinsiyet
Erkek
Profil Kapağı
1522193036
Selam, bir ödevimi yapmaya çalışıyorum. Ödevde girilen 5 öğrencinin vize final notları alınıp ekrana yazdırılacak ve struct yapısı kullanmam gerekiyor. Elimde halihazırda çalışan bir kod var ama ondan bağımsız bir şey yapmak istedim.

Hazır kodda structlar iç içe ben buna gerek olmadığını düşündüm ama sorun yaşıyorum. Yazdığım kod şu şekilde:
C:
#include <stdio.h>
struct ogrenci{
    char ad[15],soyad[15];
    int no;
}ogr[5];
struct ders{
    int ders_kod,vize,final;
    double gecme_notu;
}ders[5];
main(){
    double gecme_notu=0;
    for(int i=0;i<3;i++){
        printf("%d. Ogrencinin adini giriniz: ",i+1);
        gets(ogr[i].ad);
        printf("%d. Ogrencinin soyadini giriniz: ",i+1);
        gets(ogr[i].soyad);
        printf("%d. Ogrencinin nosunu giriniz: ",i+1);
        scanf("%d",ogr[i].no);
        
        for(int j=0;j<5;j++){
            printf("%d. Dersin ders kodunu giriniz: ",j+1);
            scanf("%d",&ders[j].ders_kod);
            printf("%d. Dersin vize notunu giriniz: ",j+1);
            scanf("%d",&ders[j].vize);
            printf("%d. Dersin final notunu giriniz: ",j+1);
            scanf("%d",&ders[j].final);
            ders[j].gecme_notu=(ders[j].vize*0,4+ders[j].final*0,6);
            
        }
        printf("\n");
        printf("Ogrenci Adi: %s\nOgrenci Soyadi: %s\nOgrenci Okul No: %d",ogr[i].ad,ogr[i].soyad,ogr[i].no);
        for (int j = 0; j < 5; j++) {
            printf("\n%d. Dersin Ortalamasi: %.2lf", j+1, ders[j].gecme_notu);
    }
    printf("\n\n---------------------------\n\n");
}

    
}

Öğrenci numarasını aldıktan sonra kapanıyor ve sorunu çözemedim. Yardımcı olur musunuz?
 
Fazla inceleyemedim ama bu kodda önce bütün öğrencileri alır sonra notları alır, bubu engellemek için for yapılarını birleştirip teke düşürmelisin. Hatam varsa arkadaşlar düzeltir.
@Vavien.
 
Fazla inceleyemedim ama bu kodda önce bütün öğrencileri alır sonra notları alır, bubu engellemek için for yapılarını birleştirip teke düşürmelisin. Hatam varsa arkadaşlar düzeltir.
@Vavien.
Hocam for yapıları iç içe zaten. Sondaki for yapısını içeri koymak mantıksız geldi çünkü sonuç gösteriyor işlem yapmıyor.
 
Numara alırken sıkıntı çıkartıyordu. Neden bilmiyorum. Struct'a o kadar hakim değilim.
En basitinden void main ya da int main yazman beklenir. Çoğu compiler bunu dert etmez ama yine de yapmamazlık etme.
Ama bu şekilde sanırım istediğin gibi çalışıyor. Vize ve final notlarında çarparken virgül kullanmışsın, nokta olmalı. Birkaç ufak değişiklik de var fark edersin zaten.

C:
#include <stdio.h>
struct ogrenci{
    char ad[15],soyad[15];
    int numara;
}ogr[5];
struct ders{
    int ders_kod,vize,final;
    double gecme_notu;
}ders[5];
int main(){
    //double gecme_notu=0;
    int ogrencino=0;
    for(int i=0;i<3;i++){
        printf("%d. Ogrencinin adini giriniz: ",i+1);
        gets(ogr[i].ad);
        printf("%d. Ogrencinin soyadini giriniz: ",i+1);
        gets(ogr[i].soyad);
        printf("%d. Ogrencinin nosunu giriniz: ",i+1);
        scanf("%d",&ogrencino);
        ogr[i].numara=ogrencino;
        //scanf("%d", ogr[i].numara);
        
        for(int j=0;j<5;j++){
            printf("%d. Dersin ders kodunu giriniz: ",j+1);
            scanf("%d",&ders[j].ders_kod);
            printf("%d. Dersin vize notunu giriniz: ",j+1);
            scanf("%d",&ders[j].vize);
            printf("%d. Dersin final notunu giriniz: ",j+1);
            scanf("%d",&ders[j].final);
            ders[j].gecme_notu=((float)ders[j].vize*0.4+(float)ders[j].final*0.6);
            
        }
        printf("\n");
        printf("Ogrenci Adi: %s\nOgrenci Soyadi: %s\nOgrenci Okul No: %d",ogr[i].ad,ogr[i].soyad,ogr[i].numara);
        for (int j = 0; j < 5; j++) {
            printf("\n%d. Dersin Ortalamasi: %.2lf", j+1, ders[j].gecme_notu);
    }
    printf("\n\n---------------------------\n\n");
}

    
}
 
C:
#include <stdio.h>

struct ogrenci
{
    char ad[15],soyad[15];
    int no;
}ogr[5];

struct ders
{
    int ders_kod,vize,final;
    double gecme_notu;
}ders[5];

int main()
{
    double gecme_notu=0;
    for(int i=0; i<3; i++)
    {
        printf("%d. Ogrencinin adini giriniz: ",i+1);
        gets(ogr[i].ad);
        printf("%d. Ogrencinin soyadini giriniz: ",i+1);
        gets(ogr[i].soyad);
        printf("%d. Ogrencinin numarasini giriniz: ",i+1);
        scanf("%d",&ogr[i].no);
    
        for(int j=0; j<5; j++)
        {
            printf("%d. Dersin ders kodunu giriniz: ",j+1);
            scanf("%d",&ders[j].ders_kod);
            printf("%d. Dersin vize notunu giriniz: ",j+1);
            scanf("%d",&ders[j].vize);
            printf("%d. Dersin final notunu giriniz: ",j+1);
            scanf("%d",&ders[j].final);
            ders[j].gecme_notu=(ders[j].vize*0.4+ders[j].final*0.6);
        
        }
        printf("\n");
        printf("Ogrenci Adi: %s\nOgrenci Soyadi: %s\nOgrenci Okul No: %d",ogr[i].ad,ogr[i].soyad,ogr[i].no);
        for (int j = 0; j < 5; j++)
        {
            printf("\n%d. Dersin Ortalamasi: %.2lf", j+1, ders[j].gecme_notu);
        }
        printf("\n\n---------------------------\n\n");
    }
    return 0;
}

Bunu deneyin.

scanf("%d",ogr.no); yerine scanf("%d",&ogr.no); olması gerekir.
 
Son düzenleme:
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Yeni konular

Geri
Yukarı