Nisok έγραψε:thodoris_turtle έγραψε:
- Κώδικας: Επιλογή όλων
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct agent
{
char name[40];
int code;
double height;
}agent1;
int search(FILE *fptr,agent agent1); // Στο search δεν θα βάζει το αρχείο αλλά θα το φορώνεις σε ένα πίνακα και θα βάζεις το πίνακα.
int main()
{
char numstr[81];
FILE *fptr;
int anazitisi;
//clrscr();
if((fptr=fopen("struct1.rec","ab"))==NULL)
{
printf("Can't open file agents.rec");
exit(1);
}
do
{
printf("\nEnter Name:"); /* get name.*/
gets(agent1.name); // Θα χρησιμοποιήσεις scanf σε όλα τα gets.
printf("\nEnter number:");
gets(numstr); // Περιττό θα βάλεις scanf('%d',&numstr) και το numstr θα το κάνεις int.
agent1.code=atoi(numstr);
printf("\nEnter height:");
gets(numstr);
agent1.height=atof(numstr); // Το ίδιο με το πιο πάνω
fwrite(&agent1,sizeof(agent1),1,fptr); /*write struct to file*/
printf("\n");
printf("Add another agent (y/n)?:");
}while(getche()=='y');
fclose(fptr);
getch();
printf("\n");
if((fptr=fopen("struct1.rec","rb"))==NULL)
{
printf("Can't open file struct1.rec");
getch();
exit(1);
}
while(fread(&agent1,sizeof(agent1),1,fptr)==1) // Αυτό δεν πρέπει να ισχύει! Το fread θα το κάνεις μέχρι να βρείς eof ( end of file)
{
printf("Name:%s\n",agent1.name);
printf("Number:%d\n",agent1.code);
printf("Height:%f\n",agent1.height);
}
fclose(fptr);
getch();
anazitisi=search(fptr,agent1); // Θα το αλλάξεις όπως σου έγραψα
if(anazitisi==0)
printf("Den entopistike\n");
else
printf("Entopistike stin thesi %d",anazitisi);
return 0;
}
int search(FILE *fptr,agent agent1)
{
int flag,kodikos,position;
fclose(fptr); // Θα τα αλλάξεις ΟΛΑ αυτά.
fptr=fopen("struct1.rec","r");
flag=0;
position=0;
printf("Dose ton kodiko pros anazitisi:");
scanf("%d",&kodikos);
while((fread(&agent1),sizeof(agent1),1,fptr)==1)&&(flag==0)
{
position++;
if(agent1.code==kodikos)
{
flag=1;
printf("%s\n",agent1.name);
printf("%d\n",agent1.code);
printf("%f\n",agent1.height);
}
}
if(flag==0)
return 0;
else
return(position); // Δεν θέλει περένθεση
}
Γενικά δες τα σχόλια που έβαλα.
Φίλε όλη η anazitisi είναι για τα μπάζα. Όπως σου είπα θα φορτώνεις το αρχείο σε ένα πίνακα τύπου agent και τα ψάχνεις σε αυτόν.
Επίσης τώρα το είδα δεν θα γράφεις μια μια τις δομές στο αρχείο , αλλά θα βάζεις μέσα όλο το πίνακα όταν το γεμίσεις.
Στη συνέχεια ΑΜΑ θέλεις θα πηγαίνεις το curson του αρχείο στη θέση αυτή με fseek.
ενταξη θα κοιταξω τα σχολια σου δεν θυμαμε πως θα περασω το αρχειο σε εναν πινακα τυπου δομης δεδομενων