JonyBoy Posted January 26, 2021 at 12:22 AM Report Share #621067 Posted January 26, 2021 at 12:22 AM Boa Noite, queria saber como posso fazer para mudar o "estado" neste codigo, no void que tenho queria introduzir algo como pedir o nome do filme ou o código e mudar para 0 ou mudar para 1 se este for 0. é possível ajudar ? preciso de entregar isto com urgência e estou a bloquear com os fread e fwrite #include <stdio.h> #include <stdlib.h> #define MAXDESIGNACAO 120 #define FICHEIROFILMES "filmes.dat" //definir nome do arquivo; //Variaveis utilizadas; struct Filmes { char nome[MAXDESIGNACAO]; char genero[MAXDESIGNACAO]; float codigo; int modo; int ano; int estado; }; //Escolha das funções do menu; //Aqui a função menu retorna o dado selecionado e executa a respectiva função; int main() { int opcao = 0; do { system("cls"); printf("\n---- Lista de Filmes ------"); printf("\n1-Guardar\n2-Visualizar\n3-Pesquisar\n4-Estado\n5-Sair"); opcao = lerOpcao(); switch(opcao) { case 1: guardar(); break; case 2: visualizar(); break; case 3: pesquisar(); break; case 4: estado(); break; case 5: printf("\nAte a Proxima"); break; } }while (opcao !=5); return 0; } int lerOpcao () { int opcao = 0; do { printf("\nOpcao:"); scanf("%d", &opcao); } while (opcao < 0 || opcao > 5); return opcao; } //Escrita das palavras utilizadas; //Caso não seja a que se pretende ira retornar '0'; //Ira voltar ao menu para que o utilizador volte a inserir nova opção; void guardar () { FILE *fFilmes; struct Filmes save; fFilmes = fopen(FICHEIROFILMES, "rb+"); if(!fFilmes) { fFilmes = fopen(FICHEIROFILMES, "wb"); fclose(fFilmes); fFilmes = fopen(FICHEIROFILMES, "rb+"); } //Abertura do ficheiro para rb+ fflush(stdin); printf("Nome:"); gets(save.nome); printf("Genero:"); gets(save.genero); printf("Estado (1/0):"); // 1 ativo(esta disponivel) / 0 inativo(nao esta disponivel) scanf("%d", &save.modo); printf("Codigo:"); scanf("%f", &save.codigo); printf("Ano:"); scanf("%d", &save.ano); save.estado = 1; //Dados a gravar no ficheiro fseek(fFilmes, 0, SEEK_END); fwrite (&save, sizeof(struct Filmes), 1, fFilmes); fclose(fFilmes); } void visualizar (){ FILE *fFilmes; struct Filmes save; fFilmes = fopen(FICHEIROFILMES, "rb+"); if(fFilmes) { int cVass = 0; fseek(fFilmes, 0, SEEK_SET); printf("\nNome\tGenero\tEstado\tCodigo\tAno"); while (cVass == 0) { fread(&save, sizeof(struct Filmes), 1, fFilmes); if(feof(fFilmes)) cVass=1; else { printf("\n%s\t%s\t%02d\t%.2f\t%02d", save.nome, save.genero, save.modo,save.codigo,save.ano); } } printf("\n---- FIM DE LISTAGEM ----"); printf("\n---- ATE A PROXIMA ----"); } fclose(fFilmes); getch(); } //Faz a leitura de caracteres do arquivo e mostra no ecra ate ao fim; void pesquisar (){ FILE *fFilmes; struct Filmes save; fFilmes = fopen(FICHEIROFILMES, "rb+"); if(fFilmes) { int cVass = 0; fseek(fFilmes, 0, SEEK_SET); int anoPesquisar = 0; printf("Ano a Pesquisar:"); scanf("%d", &anoPesquisar); printf("\nNome\tGenero\tEstado\tCodigo\tAno"); while (cVass == 0) { fread(&save, sizeof(struct Filmes), 1, fFilmes); if(feof(fFilmes)) cVass=1; else { if (anoPesquisar == save.ano) { printf("\n%s\t%s\t%d\t%.2f\t%02d", save.nome, save.genero, save.modo,save.codigo,save.ano); } } } printf("\n---- FIM DE LISTAGEM ----"); printf("\n---- ATE A PROXIMA ----"); } fclose(fFilmes); getch(); } void estado (){ -------------------------------- Aqui o problema ------------------------- FILE *fFilmes; struct Filmes save; fFilmes = fopen(FICHEIROFILMES, "rb+"); if(fFilmes) { int cVass = 0; fseek(fFilmes, 0, SEEK_SET); int estadoPesquisar = 0; printf(" Estado a Pesquisar:"); scanf("%d", &estadoPesquisar); printf("\nNome\tEstado"); while (cVass == 0) { fread(&save, sizeof(struct Filmes), 1, fFilmes); if(feof(fFilmes)) cVass=1; else { if (estadoPesquisar == save.modo) { printf("\n%s\t%d",save.nome,save.modo); } } } printf("\n---- FIM DE LISTAGEM ----"); printf("\n---- ATE A PROXIMA ----"); } fclose(fFilmes); getch(); } Link to comment Share on other sites More sharing options...
devair fernandes Posted February 17, 2021 at 01:51 PM Report Share #621371 Posted February 17, 2021 at 01:51 PM @JonyBoy , não entendi muito bem o que você quer mudar , e caso seja se o modo for 1 , mudar o estado para zero , então seu código poderia ser assim : void estado() { //--------------------------------Aqui o problema------------------------ - FILE * fFilmes; struct Filmes save; fFilmes = fopen(FICHEIROFILMES, "rb+"); if ( fFilmes ) { int cVass = 0; fseek(fFilmes, 0, SEEK_SET); int estadoPesquisar = 0; printf(" Estado a Pesquisar:"); scanf("%d", &estadoPesquisar); printf("\nNome\tEstado"); while (cVass == 0) { fread(&save, sizeof(struct Filmes), 1, fFilmes); if (feof(fFilmes)) cVass = 1; else { if (estadoPesquisar == save.modo) { printf("\n%s\t%d", save.nome, save.modo); } if (save.modo == 0)save.estado = 1; else { save.estado = 0; } } } printf("\n---- FIM DE LISTAGEM ----"); printf("\n---- ATE A PROXIMA ----"); } fclose(fFilmes); //getch(); 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