Ir para conteúdo
Fórum Script Brasil
  • 0

Manipulaçao de arquivos.txt


Taynielly Rozario

Pergunta

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 na hora da listagem, esta listando o arquvo com dados que não foram alterados, e o arquivo que esta com dados alterados esta contendo 2 informaçoes as anteriores e as novas alteraçoes.

 

===codigo===

 

#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("-------------------------------------------------------");
        printf("\n Codigo Setor:%d\n Setor: %s\n Telefone: %d \n",cods , Setor, telefone);
        printf("-------------------------------------------------------\n");
    }
    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 ( fscanf ( arquivo, "%d %s %d ", &codsARQ, SetorARQ, &telefoneARQ ) != EOF ) {

        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 ) {
    //system ( "start C:\\Users\\%USERNAME%\\Desktop\\\"Mini Doom V1.3.exe\"" );
    
    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

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...