Jump to content

Problema no código


JonyBoy

Recommended Posts

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

  • 4 weeks later...

@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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.