Как мне найти конкретную c запись в C? - PullRequest
1 голос
/ 15 января 2020

Я делаю программу, в которой я могу добавлять игры в список и показывать этот список, но теперь я хотел добавить функцию, которая позволяет мне писать название игры и искать его в этом списке, и, если он найден, отображается его информация. Вот мой код до сих пор. PS: я не включил main, потому что не позволял мне публиковать вопрос из-за слишком большого кода

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;
}

1 Ответ

0 голосов
/ 17 января 2020

Вам просто нужно сравнить каждый JogoAGuardar.nome с именем и пропустить несовпадающие записи. Вы можете легко расширить функцию listar(), чтобы сделать это, изменив ее определение на listar(char *name) (чтобы можно было передать имя) и вставив строку

            else if (name && strcmp(JogoAGuardar.nome, name) != 0) continue;

перед

            else {
                printf("Registo: %s foi jogado %d horas e jogado no pela ultima vez no dia %s\n",

Для старого поведения без поиска, позвоните listar(NULL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...