Ir ao conteúdo
  • Cadastre-se

Função Modificar/excluir (Arquivos - Linguagem C)


taynielly

Posts recomendados

Oi pessoal alguém pode me dar uma ideia sobre a questão abaixo.
O assunto é arquivo, estou tentando fazer uma função para modificar(alterar) e excluir(remoçao) um registro do arquivo, porém nesse caso a funçao de modificar(alterar) esta dando erro.

segue o codigo abaixo:

Castro de setores.txt

#include <stdio.h>
#include <stdlib.h>

//funçao para abir.
FILE* AbreArquivo(char modo, char caminho[30]){
    FILE *arquivo;
    switch(modo){
        case 'g':
            arquivo = fopen(caminho,"wt"); // Gravaço
            break;
        case 'l':
            arquivo = fopen(caminho,"rt"); // leitura
            break;
        case 'a':
            arquivo = fopen(caminho,"a"); // anexar
            break;
    }
    if(arquivo==NULL){
        printf("\nNao foi possivel abrir. \n Arquivo Inexistente");
        exit(0);
    }
    return arquivo;
}
//funçao para fechar
void FecharArquivo(FILE *arquivo){
    fclose(arquivo);
}
//funçao para cadastrar
void Cadastra(int cods, char Setor[30], int telefone){
    FILE *arquivo;
    arquivo = AbreArquivo('a', "Setor.txt");
    fprintf(arquivo, "%d %s %d\n", cods, Setor, telefone);
    FecharArquivo(arquivo);
}
//funçao para listar
void Listar(){
    FILE *arquivo;
    int cods;
    char Setor[30];
    int telefone;
    arquivo = AbreArquivo('l',"Setor.txt");
    while(!feof(arquivo)){
        fscanf(arquivo,"%d %s %d ",&cods , &Setor, &telefone);
        printf("\nCodigo Setor:%d Setor: %s  -  Telefone: %d \n",cods , Setor, telefone);
    }
    FecharArquivo(arquivo);
}
//funçao para modificar(alterar).
void Alteracao(int cods, char Setor[30], int telefone){
     FILE *arquivo, *arquivo2;
     int codsARQ;
     char SetorARQ[30];
     int telefoneARQ;
    
    
    arquivo = AbreArquivo('l',"Setor.txt");
    arquivo2 = AbreArquivo('a',"Setor1.txt");
    
    while(!feof(arquivo)){
        fscanf(arquivo,"%d %s %d ",&codsARQ, &SetorARQ, &telefoneARQ);
        if(cods == codsARQ)
             fprintf(arquivo2, "%d %s %d\n", cods, Setor, telefone);
        else
            fprintf(arquivo2, "%d %s %d\n", codsARQ, SetorARQ, telefoneARQ);   
        //printf("\nCodigo Setor:%d Setor: %s  -  Telefone: %d \n",cods , Setor, telefone);
    }
    FecharArquivo(arquivo);
    FecharArquivo(arquivo2);
}
int main(void){
    
    int op;
    char Setor[30];
    int telefone, cods;
    do{
        
        system("cls");
        
        printf("\t       Bem Vindo. \n\n\t===Lista de Setores===\t");
        printf("\n\t\tMENU\n");
        printf("\n 1 - Cadastrar Setor e Telefone:");
        printf("\n 2 - Listar todos os Setores e Telefones:");
        printf("\n 3 - Alterar Setor e Telefone:");
        printf("\n 4 - Remover Setor e Telefone:");
        printf("\n 5 - Sair.");
        printf("\n");
        printf("\nDigite um Numero: ");
        scanf("%d", &op);
        
        switch(op){
            case 1:
                system("cls");
                printf("\nDigite o Codigo do Setor: ");
                scanf("%d", &cods);
                printf("\nDigite o Setor: ");
                setbuf(stdin,NULL);
                gets(Setor);
                printf("\nDigite o telefone: ");
                scanf("%d", &telefone);
                Cadastra(cods, Setor, telefone);
                system("pause");
                break;
            case 2:
                system("cls");
                Listar();
                system("pause");
                break;
            case 3:
                system("cls");
                printf("\nDigite o Codigo do Setor a ser alterado: ");
                scanf("%d", &cods);
                printf("\nDigite o novo Setor: ");
                setbuf(stdin,NULL);
                gets(Setor);
                printf("\nDigite o novo telefone: ");
                scanf("%d", &telefone);
                
                Alteracao(cods, Setor, telefone);
                system("pause");
                break;
            case 4:
                break;
            case 5:
                printf("\n\nFinalizando...\n\n");
                system("pause");
                exit(0);
                break;    
            default:
                printf("\n\nEscolha invalida! Tente Novamente!\n\n");
                system("pause");
        }    
    
   }while(op!=5);
   
   return 0 ;
}

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, vangodp disse:

Suponho que setor é um código único não?

sim.

agradeço pela resposta. Vou trabalho melhor esses erros e ajusta-los.

adicionado 10 minutos depois

ficaria mais acesseviel trabalhar apenas um arquivo ao invés de criar outro para fazer a alteraçao, usei o criar 2 pois ficou mais fácil para mim. Qual seria a melhor forma de usar apenas 1

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!