Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Προσπαθώ να κάνω 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’

 

Ξέρω ότι είναι μεγάλο και δύσκολο στην αννάγνωση

Δημοσ.

πανω - πανω στο header file γραφεις #define N 5 ενω στην assort() δηλωνεις εναν ακεραιο με ονομα Ν

παλι στην assort() γραφεις fread(&min,ssizeof(struct student),1,foit);

αυτα

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...