I'm doing a program where I can add games to a list and show that list, but now I wanted to add a function that allows me to write the name of a game and search it in that list and if found display its information. Here is my code so far. PS: I didn't include main since it wasn't allowing me to post the question because of too much code
struct defJogo {
char nome[100];
int horasJogadas;
char DiaJogado[50];
};
void inserir(){
struct defJogo JogoAGuardar;
FILE *fJogo;
fJogo = fopen(FileJogos, "rb+");
if (!fJogo) {
fJogo = fopen(FileJogos, "wb");
fclose(fJogo);
fJogo= fopen(FileJogos, "rb+");
}
printf("\n----------NOVO JOGO------------\n");
printf("Nome:");
fflush(stdin);
gets(JogoAGuardar.nome);
printf("Horas Jogadas:");
fflush(stdin);
scanf("%d", &JogoAGuardar.horasJogadas);
printf("Ultimo dia Jogado:");
fflush(stdin);
gets(JogoAGuardar.DiaJogado);
fseek(fJogo, 0, SEEK_END);
fwrite (&JogoAGuardar, 1, sizeof(struct defJogo), fJogo);
fclose(fJogo);
}
void listar(){
struct defJogo JogoAGuardar;
FILE *fJogo ;
fJogo = fopen(FileJogos, "rb+");
if (fJogo) {
fseek(fJogo, 0, SEEK_SET);
int EOFEncontrado = 0;
float mediaHoras = 0;
int contador = 0;
while (EOFEncontrado == 0) {
fread(&JogoAGuardar, 1, sizeof(struct defJogo), fJogo);
if(feof(fJogo)) {
EOFEncontrado = 1;
}
else {
printf("Registo: %s foi jogado %d horas e jogado no pela ultima vez no dia %s\n",
JogoAGuardar.nome, JogoAGuardar.horasJogadas, JogoAGuardar.DiaJogado);
mediaHoras += JogoAGuardar.horasJogadas;
contador++;
}
}
if (contador > 0) {
mediaHoras = mediaHoras/contador;
printf("Numero de Jogos: %d tem media de horas jogadas~por jogo %f\n",
contador, mediaHoras);
}
fclose(fJogo);
}
else {
printf("Ficheiro inexistente... deve criar pelo menos um registo\n");
}
getch();
return 0;
}
You just need to compare each JogoAGuardar.nome
with the name and skip non-matching entries. You can easily extend your listar()
function to do this by changing its definition to listar(char *name)
(to be able to pass a name) and inserting the line
else if (name && strcmp(JogoAGuardar.nome, name) != 0) continue;
before
else {
printf("Registo: %s foi jogado %d horas e jogado no pela ultima vez no dia %s\n",
For the old behavior without searching, call listar(NULL)
.