Ana Silva Posted July 26, 2021 at 01:37 PM Report Share #622962 Posted July 26, 2021 at 01:37 PM Eu tenho de fazer estruturas para armazenar jogadores e jogos a minh duvida é como posso fazer para eliminar os jogadores presentes no ficheiro de texto alem do mais preciso ordenar a tabela de jogadores e editar a parte do peso e numero de jogos Será que alguem pode ajudar? O meu código é o seguinte: #include <stdio.h> #include <stdlib.h> #include <string.h> FILE * dados_jogador; FILE * dados_jogo; FILE * dados_gerais; int n_jogos = 0; int n_jogadores = 0; struct dados_jogador { int numero; char nome[12]; int dia; int mes; int ano; float altura; float peso; int n_jogos; }; typedef struct dados_jogador jogador; void ler_jogador(jogador listaJogadores[]){ printf("numero de jogadores: %d\n", n_jogadores); if(n_jogadores == 0){ dados_jogador = fopen("dados_jogador.txt", "a"); fprintf(dados_jogador, "Num Nome Data de nascimento Altura Peso Numero de Jogos\n"); fclose(dados_jogador); } if(n_jogadores >= 0 && n_jogadores <= 12){ printf("\nDADOS DO JOGADOR:\n"); listaJogadores[n_jogadores].numero = n_jogadores; printf("nome:"); scanf("%s", listaJogadores[n_jogadores].nome); printf("data de nascimento (do tipo dd/mm/aaaa):"); scanf("%d/%d/%d", &listaJogadores[n_jogadores].dia, &listaJogadores[n_jogadores].mes, &listaJogadores[n_jogadores].ano); if ((listaJogadores[n_jogadores].dia >= 01 && listaJogadores[n_jogadores].dia <= 30) && (listaJogadores[n_jogadores].mes == 04 || listaJogadores[n_jogadores].mes == 06 || listaJogadores[n_jogadores].mes == 9 || listaJogadores[n_jogadores].mes == 11)){ } if (listaJogadores[n_jogadores].dia >= 01 && listaJogadores[n_jogadores].dia <= 31 && (listaJogadores[n_jogadores].mes == 01 || listaJogadores[n_jogadores].mes == 03 || listaJogadores[n_jogadores].mes == 05 || listaJogadores[n_jogadores].mes == 07 || listaJogadores[n_jogadores].mes == 8|| listaJogadores[n_jogadores].mes == 10 || listaJogadores[n_jogadores].mes == 12) && listaJogadores[n_jogadores].ano >= 1583){ } if (listaJogadores[n_jogadores].dia == 29 && listaJogadores[n_jogadores].dia == 2 && (listaJogadores[n_jogadores].ano % 400 == 0 || listaJogadores[n_jogadores].ano % 4 == 0 && listaJogadores[n_jogadores].ano % 100 != 0)){ } if ((listaJogadores[n_jogadores].dia >= 01 && listaJogadores[n_jogadores].dia <= 28) && (listaJogadores[n_jogadores].mes == 2)){ } if (listaJogadores[n_jogadores].dia <= 00 || listaJogadores[n_jogadores].dia > 31){ printf("dia invalido\n"); ler_jogador(listaJogadores); } if (listaJogadores[n_jogadores].mes <= 00 || listaJogadores[n_jogadores].mes > 12){ printf("mes invalido\n"); ler_jogador(listaJogadores); } if (listaJogadores[n_jogadores].ano < 1583){ printf("ano invalido\n"); ler_jogador(listaJogadores); } printf("altura:"); scanf("%f", &listaJogadores[n_jogadores].altura); if(listaJogadores[n_jogadores].altura <= 0){ ler_jogador(listaJogadores); } printf("peso:"); scanf("%f", &listaJogadores[n_jogadores].peso); if(listaJogadores[n_jogadores].peso <= 0){ ler_jogador(listaJogadores); } printf("numero de jogos:"); scanf("%d", &listaJogadores[n_jogadores].n_jogos); if(listaJogadores[n_jogadores].n_jogos < 0){ ler_jogador(listaJogadores); } dados_jogador = fopen("dados_jogador.txt", "a"); fprintf(dados_jogador, "%d \t\t%s \t\t %02d/%02d/%d\t\t %.2f\t\t %.2f\t\t %d\n", listaJogadores[n_jogadores].numero, listaJogadores[n_jogadores].nome, listaJogadores[n_jogadores].dia, listaJogadores[n_jogadores].mes, listaJogadores[n_jogadores].ano, listaJogadores[n_jogadores].altura, listaJogadores[n_jogadores].peso, listaJogadores[n_jogadores].n_jogos); fclose(dados_jogador); dados_gerais = fopen("dados_gerais.dat", "ab"); fwrite (&listaJogadores, sizeof(struct dados_jogador), 1 , dados_gerais); fclose(dados_gerais); n_jogadores++; } if(n_jogadores > 12){ printf("maximo de jogadores:12\n"); } } void consultar_jogador(jogador listaJogadores[]){ dados_jogador=fopen("dados_jogador.txt","r"); //para abrir os ficheiros para ler while(fgets(listaJogadores[n_jogadores].nome, 200, dados_jogador)!= NULL){ printf("%s", listaJogadores[n_jogadores].nome); } fclose(dados_jogador); } void eliminar_jogador(jogador listaJogadores[]) { int numero; printf("Jogadores existentes: \n"); consultar_jogador(listaJogadores); printf("Qual numero do jogador que deseja eliminar:"); scanf("%d", &numero); for(int i=numero;i<n_jogadores;i++){ listaJogadores[numero] = listaJogadores[numero+1]; dados_jogador = fopen("dados_jogador.txt", "w+"); fprintf(dados_jogador, "Num Nome Data de nascimento Altura Peso Numero de Jogos\n%d \t\t%s \t\t %02d/%02d/%d\t\t %.2f\t\t %.2f\t\t %d\n", listaJogadores[n_jogadores].numero, listaJogadores[n_jogadores].nome, listaJogadores[n_jogadores].dia, listaJogadores[n_jogadores].mes, listaJogadores[n_jogadores].ano, listaJogadores[n_jogadores].altura, listaJogadores[n_jogadores].peso, listaJogadores[n_jogadores].n_jogos); fclose(dados_jogador); } n_jogadores--; } void editar_jogador(jogador listaJogadores[]){ int num; printf("Jogadores existentes: \n"); consultar_jogador(listaJogadores); printf("Qual numero do jogador que deseja editar:"); scanf("%d", &num); printf("Peso:"); scanf("%f", &listaJogadores[num].peso); printf("Numero de jogos: "); scanf("%d", &listaJogadores[num].n_jogos); } void procurar_jogador(jogador listaJogadores[]){ char numero; printf("Numero do jogador a procurar: "); scanf("%d", numero); printf("Nome: %s\nData de nascimento: %02d/%02d/%d\nAltura: %.2f\nPeso:%.2f\nNumero de jogos:%d", listaJogadores[numero].nome, listaJogadores[numero].dia, listaJogadores[numero].mes, listaJogadores[numero].ano, listaJogadores[numero].altura, listaJogadores[numero].peso, listaJogadores[numero].n_jogos); } struct dados_jogo { int dia; int mes; int ano; char local[50]; char adversario[50]; char resultado[50]; }; typedef struct dados_jogo jogo; void ler_jogo(jogo listaJogos[]) { printf("numero de jogos: %d\n",n_jogos); if(n_jogos == 0){ dados_jogo = fopen("dados_jogo.txt", "a"); fprintf(dados_jogo, "Data Local Adversario Resultado "); fclose(dados_jogo); } if(n_jogos >= 0 && n_jogos < 100){ printf("\nDADOS DO JOGO:\n"); printf("data (do tipo dd/mm/aaaa):"); scanf("%d/%d/%d",&listaJogos[n_jogos].dia, &listaJogos[n_jogos].mes, &listaJogos[n_jogos].ano); if ((listaJogos[n_jogos].dia >= 01 && listaJogos[n_jogos].dia <= 30) && (listaJogos[n_jogos].mes == 04 || listaJogos[n_jogos].mes == 06 || listaJogos[n_jogos].mes == 9 || listaJogos[n_jogos].mes == 11)){ } if (listaJogos[n_jogos].dia >= 01 && listaJogos[n_jogos].dia <= 31 && (listaJogos[n_jogos].mes == 01 || listaJogos[n_jogos].mes == 03 || listaJogos[n_jogos].mes == 05 || listaJogos[n_jogos].mes == 07 || listaJogos[n_jogos].mes == 8|| listaJogos[n_jogos].mes == 10 || listaJogos[n_jogos].mes == 12) && listaJogos[n_jogos].ano >= 1583){ } if (listaJogos[n_jogos].dia == 29 && listaJogos[n_jogos].dia == 2 && (listaJogos[n_jogos].ano % 400 == 0 || listaJogos[n_jogos].ano % 4 == 0 && listaJogos[n_jogos].ano % 100 != 0)){ } if ((listaJogos[n_jogos].dia >= 01 && listaJogos[n_jogos].dia <= 28) && (listaJogos[n_jogos].mes == 2)){ } if (listaJogos[n_jogos].dia <= 00 || listaJogos[n_jogos].dia > 31){ printf("dia invalido\n"); ler_jogo(listaJogos); } if (listaJogos[n_jogos].mes <= 00 || listaJogos[n_jogos].mes > 12){ printf("mes invalido\n"); ler_jogo(listaJogos); } if (listaJogos[n_jogos].ano < 1583){ printf("ano invalido\n"); ler_jogo(listaJogos); } printf("local:"); scanf("%s", listaJogos[n_jogos].local); printf("adversario:"); scanf("%s", listaJogos[n_jogos].adversario); printf("resultado:"); scanf("%s", listaJogos[n_jogos].resultado); dados_jogo = fopen("dados_jogo.txt", "a"); fprintf(dados_jogo, "\n%02d/%02d/%d %s %s %s", listaJogos[n_jogos].dia, listaJogos[n_jogos].mes, listaJogos[n_jogos].ano, listaJogos[n_jogos].local, listaJogos[n_jogos].adversario, listaJogos[n_jogos].resultado); fclose(dados_jogo); dados_gerais = fopen("dados_gerais.dat", "ab"); fwrite (&listaJogos, sizeof(struct dados_jogo), 1 , dados_gerais); fclose(dados_gerais); n_jogos++; } if(n_jogos >= 100){ printf("limite excedido de jogos:100\n"); } } void ordenar_Nome(jogador listaJogadores[]){ } void contabilizar(jogo listaJogos[]){ } int main(int argc, char *argv[]) { jogador listaJogadores[12]; jogo listaJogos[100]; char opcao; dados_jogador=fopen("dados_jogador.txt","r"); //para abrir os ficheiros para ler while(fgets(listaJogadores[n_jogadores].nome, 200, dados_jogador)!= NULL){ n_jogadores++; } if(n_jogadores != 0){ n_jogadores--; } fclose(dados_jogador); dados_jogo=fopen("dados_jogo.txt","r"); //para abrir os ficheiros para ler while(fgets(listaJogos[n_jogos].local, 200, dados_jogo)!= NULL){ n_jogos++; } if(n_jogadores != 0){ n_jogos--; } fclose(dados_jogo); do{ printf(" MENU INICIAL:\n"); printf("Escolha uma das opcoes:\n"); printf("1- Inserir jogador \n"); printf("2- Editar jogador \n"); printf("3- Procurar jogador \n"); printf("4- Eliminar jogador \n"); printf("5- Inserir jogo \n"); printf("6- Contabilizar \n"); printf("7- Sair do programa \n"); fflush(stdin); printf("opcao:"); scanf("%c", &opcao); switch(opcao){ case '1': ler_jogador(listaJogadores); break; //escolha das opcoes e suas funcoes case '2': editar_jogador(listaJogadores); break; case '3': procurar_jogador(listaJogadores); break; case '4': eliminar_jogador(listaJogadores); break; case '5': ler_jogo(listaJogos); break; case '6': contabilizar(listaJogos); break; case '7': return 0; default: printf("Opcao invalida\n");break; } } while (opcao != '7'); return 0; } O conteúdo do ficheiro de texto dos jogadores é : Num Nome Data de nascimento Altura Peso Numero de Jogos 0 Peter 12/07/1970 1.70 70.00 2 1 Luis 21/08/1980 1.80 80.00 4 2 Kyle 13/08/1980 1.70 78.00 2 3 John 03/03/1970 1.79 80.00 2 4 Hugo 02/09/1980 1.70 68.00 4 Desde já agradeço a vossa ajuda Link to comment Share on other sites More sharing options...
maluco-123 Posted August 19, 2021 at 10:06 PM Report Share #623247 Posted August 19, 2021 at 10:06 PM Viva, Dentro do "eliminar_jogador", no for loop, estás a aceder ao array por "numero" e não pela variável iteradora (i), Teras de iterar apenas até "n_jogadores - 1", e copiar de (i+1) para (i), Espero não vir tarde de mais 🙂 boa sorte Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now