Arama butonu
Bu konudaki kullanıcılar: 1 misafir
4
Cevap
980
Tıklama
0
Öne Çıkarma
C - Program Çalışmıyor - (Struct ve Function)
P
14 yıl (55 mesaj)
Çavuş
Konu Sahibi

Merhaba arkadaşlar.. Bir ödevim var üzerinde çalışmama rağmen tamamlayamadım. txt dosyasından öğrencilere ait isim soy isim midterm1 midterm2 ve final notlarını okuyup, programda bunları istenilen sınava göre büyükten küçüğe sıralayacak şekilde ekrana yazdırmak. Programı ben aşağıdaki şekilde yazdım anca syntax error veriyor fonksiyonu çağırdığım yerler için. Ayrıca fonksiyon içinde de bir sorun veriyor. Nerede yanlış yapıyorum acaba? Yardımcı olursanız çok mutlu olucam...


#include <stdio.h> 
#define SIZE 10

struct student {

char name[20];
char surname[20];
int mid1,mid2,final;
};

void bubble(struct student a[SIZE]){

int pass,i,hold;

for(pass=1; pass<SIZE; pass++){
for(i=0; i<SIZE-1; i++){
hold= a[i];
a[i]= a[i+1];
a[i+1]= hold;
}
}
}

int main(){

int i,request;
struct student info[SIZE];

FILE *cfPtr;

if ( (cfPtr = fopen("grades.txt", "r") ) == NULL){
printf("File could not be opened\n");
}
else {
printf("Which notes do you want to learn? For Midterm 1 >> Press 1\t For Midterm 2 >> Press 2\t For Final >> Press 3\n");
scanf("%d",&request);
}

while( !feof(cfPtr) ){
fscanf(cfPtr,"%s %s %d %d %d", info[i].name, info[i].surname, &info[i].mid1, &info[i].mid2, &info[i].final);
}

fclose(cfPtr);

if(request=1){
void bubble(struct student info[SIZE].name);
void bubble(student info[SIZE].surname);
void bubble(student info[SIZE].mid1);
printf("Midterm 1 Scores:\n");
for(i=0; i<SIZE; i++)
printf("%s %5.s %5.d\n", info[i].name, info[i].surname, info[i].mid1);
}

if(request=2){
void bubble(student info[SIZE].name);
void bubble(student info[SIZE].surname);
void bubble(student info[SIZE].mid2);
printf("Midterm 2 Scores:\n");
for(i=0; i<SIZE; i++)
printf("%s %5.s %5.d\n", info[i].name, info[i].surname, info[i].mid2);
}

if(request=3){
void bubble(student info[SIZE].name);
void bubble(student info[SIZE].surname);
void bubble(student info[SIZE].final);
printf("Final Scores:\n");
for(i=0; i<SIZE; i++)
printf("%s %5.s %5.d\n", info[i].name, info[i].surname, info[i].final);
}
}

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



Y
14 yıl (284 mesaj)
Yüzbaşı

verilen error ları yazar mısın? void de return istiyor olabilir. hataları yazarsan tekrar bakarım sadece göz gecirdim.


Bu mesaja 1 cevap geldi.
T
14 yıl (1648 mesaj)
Yüzbaşı

Konuyuda unutmuşum koddan gerçekten bir şey anlamadım kalıtım yaparak yazmayı denesen bence sorun kalmayacak.


Bu mesaja 1 cevap geldi.
T
14 yıl (4412 mesaj)
Binbaşı

Programını compile etmedim ama gözüme çarpan birçok hatan var:

1-) Oluşturmuş olduğun info array'inin i'inci değerini okumak istiyorsun ama i değerine herhangi bir sayı atamamışsın. info array'inin elemanlarına değer atamak istiyorsan, i değerini 0'dan SIZE'a kadar ilerleten bir for döngüsü kullanmanı öneririm.

2-) if'lerin içinde request değerini 1, 2 veya 3'le karşılaştırırken tek eşittir(=) işareti kullanmışsın. if statement'ı içerisinde eşitlik karşılaştırması yapmak istiyorsan iki eşittir işareti (==) kullanman lazım. if(request==1) gibi.

Buradaki hatan çok önemli. Çok büyük yanlışların var.
3-)
a-) Fonksiyon çağırırken;

void bubble(struct student info[SIZE].name);

şeklinde bir çağırma yapmışsın. Fonksiyon çağırılırken başına return değeri yazılmaz. Yani;

bubble(argüman buraya gelecek)

yazman gerekmekte.

b-) struct'ını oluşturduğun değerin sonradan başına struct yazman gerekmiyor. Onu

struct student info[SIZE];

şeklinde tanımladıktan sonra o objeyi kullanabilmek için

info[].mid1

yazman yeterli olacaktır.

c-) Tanımlamış olduğun bubble fonksiyonuna argüman olarak bir student array'i istiyorsun ama gönderdiğin argümanlar, o struct'ın birer elemanı. Oradaki karışıklıkları da gidermen gerekecek.


Bu mesaja 1 cevap geldi.
P
14 yıl (55 mesaj)
Çavuş
Konu Sahibi

Kusura bakmayın arkadaşlar, sınavlarım yoğun olduğundan bakamadım buraya. Sorun hala devam etmekte birkaç ufak değişiklik yapıp farklı şeyler denememe rağmen.

Resimde bütün sorunlar prt. sc. ettim. Fonksiyonun içinde ve fonksiyonu çağırdığım yerlerde hata veriyor. Promgam çıktısının şu şekilde olması lazım;

Midterm1(2) (final) Scores:
name1 surname1 90
name2 surnam2 80
name3 surname3 70
.
.
.
gibi büyükten küçüğe doğru sıralanıp bu şekilde ekrana gelecek..



< Resime gitmek için tıklayın >



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.