giannisosfp Δημοσ. 28 Μαρτίου 2012 Δημοσ. 28 Μαρτίου 2012 Προσπαθώ να κάνω compile ένα πρόγραμμα αλλά πέρνω error στο compile. Εδώ είναι ο κώδικας από το source file >#include <stdio.h> #include "student.h" int menu(void); //Μενού void cr_a(void); //Δημιουργία-Επέκταση void anazitisi(void); //Αναζήτηση Φοιτητή Στοιχείο-Κλειδί Α.Μ. void pr_expert(void); //Αναζήτητση φοιτητών που πέρασαν όλα τα μαθήματα void pr_cut(void); //Αναζήτηση φοιτητών που δεν πέρασαν ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ void correction(void); //Διόρθωση εγγραφής void del(void); //Διαγραφή εγγραφής void per_del(void); //Οριστική Διαγραφή void assort(void); //Ταξινόμηση int main() { int choi; char c; do { choi = menu(); switch (choi) { case 1: system("clear"); cr_a(); break; case 2: system("clear"); provoli(); c=getchar(); break; case 3: system("clear"); anazitisi(); c=getchar(); break; case 4: system("clear"); pr_expert(); c=getchar(); break; case 5: system("clear"); pr_cut(); c=getchar(); break; case 6: system("clear"); correction(); c=getchar(); break; case 7: system("clear"); del(); c=getchar(); break; case 8: system("clear"); per_del(); c=getchar(); break; case 9: system("clear"); assort(); c=getchar(); break; } } while ( choi>=1 && choi<=9); printf("\n\n\t\t ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ! \n\n"); return 0; } Και εγώ ο κώδικας του header file >//===============================| // | // | // | // | //===============================| #include <string.h> #include <stdlib.h> #define N 5 //Αριθμός μαθημάτων για τον υπολογισμό του Μ.Ο. #define delete "*****" //Δομή Φοιτητή struct student{ char am[20]; //Κλειδί αναζήτησης char epi[15]; char ono[10]; float fus1; float da; float ma2; float arx1; float pro2; }; struct student S; //Ορισμός Δομής τύπου student char Foit[]="students.dat"; //Ορισμός ονόματος αρχείου FILE *foit; int menu(void) { int cho; system("clear"); printf("\n\n\n\n\n\n"); printf("\n\t\t ΠΙΝΑΚΑΣ ΕΠΙΛΟΓΩΝ "); printf("\n\t\t==================="); printf("\n\t1. Δημιουργία / Επέκταση"); printf("\n\t2. Προβολή Φοιτητών "); printf("\n\t3. Αναζήτηση Φοιτητών "); printf("\n\t4. Προβολή Φοιτητών Που Πέρασαν Όλα Τα Μαθήματα "); printf("\n\t5. Προβολή Φοιτητών Που Δεν Πέρασαν Δομές Δεδομένων "); printf("\n\t6. Διόρθωση Εγγραφής "); printf("\n\t7. Διαγραφή Εγγραφής"); printf("\n\t8. Οριστική Διαγραφή"); printf("\n\t9. Ταξινόμηση"); printf("\n\t0. Τέλος Προγράμματος "); do { printf("\n\n\tΕισαγωγή Επιλογής (0-4): "); scanf("%d", &cho); } while (cho<0 || cho>9); return cho; } //Δημιουργία-Επέκταση void cr_a(void) { int cont; foit = fopen(Foit, "rb+"); //Άνοιγμα αρχείου σε κατάσταση διαβάσματος και επέκτασης if (!foit) foit = fopen(Foit, "wb"); //Δημιουργία else fseek(foit, 0, SEEK_END); //Μεταφορά στο τέλος του αρχείου foit και παραμονή στο τέλος του με το 0 do { printf("\n\n Αριθμός Μητρώου : "); scanf("%s",S.am); printf("\n\n Επίθετο: "); scanf("%s",S.epi); printf("\n\n Όνομα: "); scanf("%s",S.ono); printf("\n\n Φυσική Ι: "); scanf("%f", &S.fus1); printf("\n\n Δομές Δεδομένων και Αρχεία: "); scanf("%f", &S.da); printf("\n\n Μαθηματική Ανάλυση ΙΙ: "); scanf("%f", &S.ma2); printf("\n\n Αρχιτεκτονική Η/Υ Ι: "); scanf("%f", &S.arx1); printf("\n\n Προγραμματισμός ΙΙ: "); scanf("%f", &S.pro2); fwrite(&S, sizeof(struct student), 1, foit); printf("\n\n Θέλετα νέα καταχώρηση (0=Όχι, 1=ΝΑΙ) : "); scanf("%d", &cont); } while (cont == 1); fclose(foit); } //Προβολή Φοιτητών και Μ.Ο. void provoli(void) { int c=0; float mo; char ca; foit = fopen(Foit, "rb"); if (!foit) { printf("\n\nΤο αρχείο με την κατάσταση των φοιτητών δεν έχει δημιουργηθεί! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } printf("=========================================================================================================================\n"); printf("|| A.M. ΕΠΙΘΕΤΟ ONOMA ΦΥΣΙΚΗ I ΔΟΜΕΣ ΜΑΘΗΜ II ΑΡΧ H/Y I ΠΡΟ II M.O. ||\n"); printf("=========================================================================================================================\n"); while (! feof(foit) ) { fread(&S, sizeof(struct student), 1, foit); if ( ! feof(foit) && strcmp(S.am,delete)!=0) { c++; mo=(S.fus1+S.da+S.ma2+S.arx1+S.pro2)/N; //Υπολογισμός Μ.Ο.; printf("|| %3d. %10s %20s %10s %10.2f %10.2f %10.2f %10.2f %10.2f %10.2f ||\n", c,S.am, S.epi, S.ono, S.fus1, S.da, S.ma2, S.arx1, S.pro2,mo); } } printf("=========================================================================================================================\n"); printf("\n\nΣύνολο Φοιτητών = %5d\n\n", c); fclose(foit); printf ("\n\nΓια επιστροφή στο μενού πατήστε Enter."); ca=getchar(); } //Αναζήτηση Φοιτητή Με Στοιχείο Κλειδί void anazitisi(void) { int flag = 0; char code[10],c; foit = fopen(Foit, "rb"); if (!foit) { printf("\n\nΤο αρχείο με την κατάσταση των φοιτητών δεν έχει δημιουργηθεί! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } printf("\n\nΕισαγωγή αριθμού μητρώου φοιτητή : "); scanf("%s",code); while (! feof(foit) && (flag == 0)) { fread(&S,sizeof(struct student), 1, foit); if (strcmp(code,S.am)==0) { flag = 1; printf("\n\tΑριθμός Μητρώου: %s",S.am); printf("\n\tΕπίθετο: %s",S.epi); printf("\n\tΌνομα: %s",S.ono); printf("\n\tΦυσική Ι: %.2f",S.fus1); printf("\n\tΔομές Δεδομένων: %.2f",S.da); printf("\n\tΜαθηματική Ανάλυση ΙΙ: %.2f",S.ma2); printf("\n\tΑρχιτεκτονική Ι: %.2f",S.arx1); printf("\n\tΠρογραμματισμός ΙΙ: %.2f",S.pro2); printf("\n\tM.O.: %.2f\n\n",(S.fus1+S.da+S.ma2+S.arx1+S.pro2)/5); } } if (flag == 0){ printf("\n\nΔεν βρέθηκε φοιτητής με τον αριθμό μητρώου που δώσατε.\n"); } printf ("\nΓια επιστοφή στο μενού πατήστε Enter."); c=getchar(); fclose(foit); } //Αναζήτηση Φοιτητών που πέρασαν όλα τα μαθήματα void pr_expert(void) { int c=0; char ca; foit = fopen(Foit, "rb"); if (!foit) { printf("\n\nΤο αρχείο με την κατάσταση των φοιτητών δεν έχει δημιουργηθεί! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } printf("\n\n ΦΟΙΤΗΤΕΣ ΠΟΥ ΠΕΡΑΣΑΝ ΟΛΑ ΤΑ ΜΑΘΗΜΑΤΑ \n"); printf("======================================================\n"); printf("|| A.M. ΕΠΙΘΕΤΟ ONOMA ||\n"); printf("======================================================\n"); while (! feof(foit) ) { fread(&S, sizeof(struct student), 1, foit); if ( ! feof(foit) ) { fread(&S, sizeof(struct student), 1, foit); if (S.fus1>=5 && S.da>=5 && S.ma2>=5 && S.arx1>=5 && S.pro2>=5){ c++; printf("|| %3d. %10s %20s %10s ||\n", c, S.am, S.epi, S.ono); } } } printf("======================================================\n"); if (c==0) printf("\n\t\t Δεν υπάρχουν καταχωρημένοι φοιτητηές που να πέρασαν όλα τα μαθήματα."); fclose(foit); if (c!=0) printf("\n\n Συνολικός αρθμός φοιτητών που πέρασαν όλα τα μαθήματα: %5d",c); printf ("\n\n Για επιστροφή στο μενού πατήστε Enter."); ca=getchar(); } //Αναζήτηση Φοιτητών που δεν πέρασαν τις Δομές Δεδομένων void pr_cut(void) { int c=0; char ca; foit = fopen(Foit, "rb"); if (!foit) { printf("\n\nΤο αρχείο με την κατάσταση των φοιτητών δεν έχει δημιουργηθεί! "); printf("\nΣυνεχίστε με δημιουργία του!!! \n\n "); return; } printf("\n\n ΦΟΙΤΗΤΕΣ ΠΟΥ ΔΕΝ ΠΕΡΑΣΑΝ ΔΟΜΕΣ \n"); printf("======================================================\n"); printf("|| A.M. ΕΠΙΘΕΤΟ ONOMA ||\n"); printf("======================================================"); while (! feof(foit) ) { fread(&S, sizeof(struct student), 1, foit); if ( ! feof(foit)) { fread(&S, sizeof(struct student), 1, foit); if (S.da<=5){ c++; printf("\n|| %3d. %10s %20s %10s ||", c, S.am, S.epi, S.ono); } } } if (c==0) printf("\n Δεν υπάρχουν φοιτητές που δεν πέρασαν Δομές."); printf("\n======================================================\n"); fclose(foit); if (c!=0) printf("\n\n Συνολικός αρθμός φοιτητών που δεν πέρασαν τις Δομές Δεδομέων: %d",c); printf ("\n\n Για επιστροφή στο μενού πατήστε Enter."); ca=getchar(); } //Διόρθωση εγγραφής void correction(void) { int flag=0; char code[10],c; foit = fopen(Foit,"rb+"); if (!foit){ printf("\n\nΤο αρχείο με τους φοιτητές δεν έχει δημιουργηθεί.\n Συνεχίστε με την δημιουργία του."); return; } printf ("\n\nΕισαγωγή Αριθμού μητρώου: "); scanf("%s",code); while (!feof(foit) && (flag==0) ){ fread(&S,sizeof(struct student),1,foit); if (strcmp(code,S.am)==0){ flag=1; printf("======================================================\n"); printf("|| A.M. ΕΠΙΘΕΤΟ ONOMA ||\n"); printf("======================================================"); printf("\n|| ||"); printf("\n|| %10s %20s %10s ||", S.am, S.epi, S.ono); printf("\n======================================================"); printf("\n\n=====Εισαγωγή διορθωμένων στοιχείων=====\n\n"); printf("Αριθμός Μητρώου: "); scanf("%s",S.am); printf("\n\nΕπίθετο: "); scanf("%s",S.epi); printf("\n\nΌνομα: "); scanf("%s",S.ono); printf("\n\nΦυσική Ι: "); scanf("%f",&S.fus1); printf("\n\nΔομές Δεδομένων & Αρχεία: "); scanf("%f",&S.da); printf("\n\nΜαθηματική Ανάλυση ΙΙ: "); scanf("%f",&S.ma2); printf("\n\nΑρχιτεκτονική Η/Υ Ι: "); scanf("%f",&S.arx1); printf("\n\nΠρογραμματισμός ΙΙ: "); scanf("%f",&S.pro2); fseek (foit,-sizeof(struct student), SEEK_CUR); fwrite(&S, sizeof(struct student),1,foit); printf ("\n\nΗ αλλαγή αποθηκεύτηκε."); } } fclose(foit); if (flag==0) printf("\n\n Δεν βρέθηκε η εγγραφή που ζητήσατε."); printf ("\n\nΓια επιστροφή στο μενού πατήστε Enter. "); c=getchar(); } //Διαγραφή Εγγραφής void del(void) { int flag=0; char code[10],c; foit = fopen(Foit,"rb+"); if (!foit){ printf("\n\nΤο αρχείο με τους φοιτητές δεν έχει δημιουργηθεί.\n Συνεχίστε με την δημιουργία του."); return; } printf ("\n\nΕισαγωγή Αριθμού μητρώου: "); scanf("%s",code); while (!feof(foit) && (flag==0) ){ fread(&S,sizeof(struct student),1,foit); if (strcmp(code,S.am)==0){ flag=1; printf("======================================================\n"); printf("|| A.M. ΕΠΙΘΕΤΟ ONOMA ||\n"); printf("======================================================"); printf("\n|| ||"); printf("\n|| %10s %20s %10s ||", S.am, S.epi, S.ono); printf("\n======================================================"); strcpy(S.am, delete); fseek (foit,-sizeof(struct student), SEEK_CUR); fwrite(&S, sizeof(struct student),1,foit); printf ("\n\nΗ διαγραφή πραγματοποιήθηκε."); } } fclose(foit); if (flag==0) printf("\n\n Δεν βρέθηκε η εγγραφή που ζητήσατε."); printf ("\n\nΓια επιστροφή στο μενού πατήστε Enter."); c=getchar(); } //Οριστική Διαγραφή void per_del(void) { FILE *temp; char c; foit = fopen(Foit,"rb"); if (!foit){ printf("\n\nΤο αρχείο με τους φοιτητές δεν έχει δημιουργηθεί.\n Συνεχίστε με την δημιουργία του."); return; } temp=fopen("temp.dat","wb"); while (!feof(foit) ){ fread(&S,sizeof(struct student),1,foit); if (!feof(foit) && strcmp(S.am,delete)!=0){ fwrite(&S, sizeof(struct student),1,temp); } } fclose(foit); fclose(temp); system("rm students.dat"); system("mv temp.dat students.dat"); printf ("\n\nΓια επιστροφή στο μενού πατήστε Enter."); c=getchar(); } //Ταξινόμηση void assort(void) { struct student x,min,tmp; char c; int i, j, N, pos; foit=fopen(Foit,"rb+"); if (!foit){ printf("\n\nΤο αρχείο με τους φοιτητές δεν έχει δημιουργηθεί.\n Συνεχίστε με την δημιουργία του."); return; } printf("\n\nΓίνεται ταξινόμηση..."); fseek(foit,0,SEEK_END); N=ftell(foit)/sizeof(struct student); for (i=0;i<N;i++){ pos=i; fseek(foit,pos*sizeof(struct student),SEEK_SET); fread(&min,ssizeof(struct student),1,foit); for (j=i+1;j<N;j++){ fseek(foit,j*sizeof(struct student),SEEK_SET); fread(&x,sizeof(struct student),1,foit); if (strcmp(x.epi,min.epi)==-1){ pos=j; min=x; } } fseek(foit,i*sizeof(struct student),SEEK_SET); fread(&tmp,sizeof(struct student),1,foit); fseek(foit,pos*sizeof(struct student),SEEK_SET); fread(&min,sizeof(struct student),1,foit); fseek(foit,i*sizeof(struct student),SEEK_SET); fwrite(&min,sizeof(struct student),1,foit); fseek(foit,pos*sizeof(struct student),SEEK_SET); fwrite(&tmp,sizeof(struct student),1,foit); } fclose(foit); printf("\n\nΓια επιστροφή στο μενού πατήστε Enter. "); c=getchar(); } Το σφάλμα είναι το εξής: >In file included from student.c:2:0: student.h: In function ‘assort’: student.h:378:12: error: expected identifier or ‘(’ before numeric constant student.h:390:3: error: lvalue required as left operand of assignment student.h:394:3: error: ‘pos’ undeclared (first use in this function) student.h:394:3: note: each undeclared identifier is reported only once for each function it appears in student.h:396:22: error: expected expression before ‘struct’ Ξέρω ότι είναι μεγάλο και δύσκολο στην αννάγνωση
nilosgr Δημοσ. 28 Μαρτίου 2012 Δημοσ. 28 Μαρτίου 2012 πανω - πανω στο header file γραφεις #define N 5 ενω στην assort() δηλωνεις εναν ακεραιο με ονομα Ν παλι στην assort() γραφεις fread(&min,ssizeof(struct student),1,foit); αυτα
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα