Jump to content
taynielly

Manipulaçao de Arquivos.txt

Recommended Posts

pessoal alguém pode me dar uma idéia 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, porem nesse caso a funçao de modificar(alterar) esta dando erro.

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 ;
}

 

Share this post


Link to post
Share on other sites

 esta dando erro

Qual é o erro? Permissão? Segmentação?

 

Não use gets por causa do buffer overflow.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Similar Content

    • By IgorExtreme
      Olá estou com problema nesta questão: "Escreva um programa que leia e armazene em um vetor os dados de 30 pessoas. Estes dados são o nome da pessoa, sua idade, e os nomes completos do pai e da mãe. A seguir, o programa deve identificar (e mostrar os índices) das pessoas que estão relacionadas por um parentesco avô-neto e irmão-irmão. No caso dos irmãos, deve ser informado ainda qual é o mais novo dos dois." O código é esse
      #include<stdio.h> #include<string.h> #define NUM 4 struct pessoa { char nome[20]; char mae[20]; char pai[20]; int idade; }; main() { struct pessoa vetorPessoas[NUM]; int i; printf("Digite os dados de %d pessoas:\n", NUM); for (i = 0; i < NUM; i++) { printf("Digite o nome da pessoa %d: ", i); fflush(stdin); gets(vetorPessoas[i].nome); printf("%s\n", vetorPessoas[i].nome); printf("Digite o nome da mae da pessoa %d: ", i); fflush(stdin); gets(vetorPessoas[i].mae); printf("%s\n", vetorPessoas[i].mae); printf("Digite o nome do pai da pessoa %d: ", i); fflush(stdin); gets(vetorPessoas[i].pai); printf("%s\n", vetorPessoas[i].pai); printf("Digite a idade da pessoa %d: ", i); fflush(stdin); scanf("%d", &vetorPessoas[i].idade); printf("%d\n", vetorPessoas[i].idade); if(!strcmp(vetorPessoas[0].pai, vetorPessoas[1].nome)){ printf("%s e avo de %s\n", vetorPessoas[1].pai, vetorPessoas[0].nome); } if(!strcmp(vetorPessoas[2].pai, vetorPessoas[3].nome)){ printf("%s e avo de %s\n", vetorPessoas[3].pai, vetorPessoas[2].nome); } } /*if(!strcmp(vetorPessoas[i].pai, vetorPessoas[i].nome)){ printf("%s e pai de %s\n", vetorPessoas[i].pai, vetorPessoas[i].pai); }*/ if(!strcmp(vetorPessoas[0].pai, vetorPessoas[1].pai)){ printf("Eles sao irmaos\n"); if(vetorPessoas[0].idade > vetorPessoas[1].idade){ printf("%s mais velho\n", vetorPessoas[0].idade); } else{ printf("%s e mais novo\n", vetorPessoas[1].idade); } } if(!strcmp(vetorPessoas[2].pai, vetorPessoas[3].pai)){ printf("Eles sao irmaos\n"); if(vetorPessoas[2].idade > vetorPessoas[3].idade){ printf("%s mais velho\n", vetorPessoas[2].idade); } else{ printf("%s e mais novo\n", vetorPessoas[3].idade); } } } O problema é que ele mostra quase tudo menos a parte se tal irmão é mais velho que o outro
    • By ricardo Oliv3ira
      Um cano cilíndrico de raio R1 vai ser usado para guardar outros dois canos de raio R2 e R3. Caso os dois últimos canos caibam dentro do primeiro, seu programa deve imprimir “Coube”. Caso contrário imprima “Não coube”.
      #include <stdio.h> int main(void) { float R1,R2,R3; printf("digite o 1º tamanho:"); scanf("%f",R1); printf("digite o 2º tamanho"); scanf("%f",R2); printf("digite o 3º tamanho"); scanf("%f",R3); if(R2,R3<R1){ printf("Coube"); } else(R2,R3>R1){ printf("Não Coube"); } return 0; }  
    • By Hodol
      Boa tarde, estou começando a programar e ainda não sei qual linguagem de programação eu devo iniciar. Me de uma luz, Obrigado!
    • By Cangemi
      Olá, alguém pode me ajudar? Estou fazendo um trabalho para estrutura de dados sobre arvore binária e eu decidi usar as funções fprintf para salvar as informações em arquivo e fscanf para ler essas informações e joga - las na minha função de inserção da arvore. O programa está funcionando, ele salva dos dados da arvore, só que, o que acontece é, que na hora de usar o fscanf ele não lê todas as informações contidas no arquivo, ele lê somente dois cadastros e joga pra função de inserção. Alguém sabe como eu posso corrigir isso?
       

       
      Arquivo fonte: 

       
      Código completo: 
      #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<ctype.h> #include<string.h> struct jogador { char nome [31]; char posicao [15]; char escalacao; float salario; int numero; struct jogador *esq; struct jogador *dir; }; struct jogador *raiz; struct jogador *pointer; struct jogador *r; FILE *p; char name [31]=" ", time[51]; char position [15]=" "; char lineup; float salary=0; int num=0, aux = 0; void cadastrar(); void carregar(); struct jogador *salvar(struct jogador *i); struct jogador *criar( struct jogador *a); // função para inserir struct jogador *listar(struct jogador *i, int x); struct jogador *all (struct jogador *i); main() { pointer = NULL; raiz = NULL; int op; do { printf("\t\t\t\t\t\t--------------------------\n"); printf("\t\t\t\t\t | *-*-*Time*-*-* |\n\t\t\t\t\t | |\n\t\t\t\t\t | | \n"); printf("\t\t\t\t\t | [1] Escolher o time |\n\t\t\t\t\t | |\n"); printf("\t\t\t\t\t | [2] Contratar jogador |\n\t\t\t\t\t | |\n"); printf("\t\t\t\t\t | [4] Listar crescente | \n\t\t\t\t\t | | \n"); printf("\t\t\t\t\t | [5] Listar decrescente | \n\t\t\t\t\t | |\n"); printf("\t\t\t\t\t | [6] Excluir time | \n\t\t\t\t\t | |\n"); printf("\t\t\t\t\t | [9] Salvar | \n\t\t\t\t\t | |\n"); printf("\t\t\t\t\t | [0] Sair |\n"); printf("\t\t\t\t\t\t--------------------------\n"); printf("\t\t\t\t\t Opcao [ ]\b\b"); scanf("%i",&op); switch(op) { case 1: { aux=0; cadastrar(); } break; case 2: { cadastrar(); } break; case 4: { if(raiz==NULL) { printf("\n Nao possui cadastro.\n"); system("pause"); } else { system("cls"); listar(pointer, 1); system("pause"); } } break; case 5: { if(raiz==NULL) { printf("\n Nao possui cadastro.\n"); system("pause"); } else { listar(pointer, 2); system("pause"); } } break; case 6: { if(raiz!=NULL) { pointer=all(pointer); printf("\n Todos os jogadores foram excluidos\n"); system("pause"); } else { printf("\n*****Nenhum jogador cadastrado*****.\n"); system("pause"); } } break; case 9: { p=fopen(time,"w"); fclose(p); salvar(pointer); } break; } system("cls"); }while(op!=0); } void cadastrar () { char resposta; char answer; do { if(aux==0) { system("cls"); printf("\n\n\n\n\n\n"); printf("\t\t\t\t\t Escolha o time para iniciar \n"); printf("\t\t\t\t\t\t___\b\b\b "); fflush(stdin); gets(time); strcat(time,".csv"); carregar(); fclose(p); aux = 1; return; } system("cls"); printf("\nNome do jogador: "); fflush(stdin); gets(name); printf("\nPosicao do jogador: "); fflush(stdin); gets(position); printf("\nO jogador e titular? <S/N>: "); answer=getche(); if(toupper(answer)=='S') { lineup = 'T'; } else { lineup = 'R'; } printf("\n"); printf("\nSalario pago ao jogador: "); scanf("%f",&salary); printf("\nInforme o numero do jogador: "); scanf("%i",&num); pointer=criar(pointer); printf("\nCadastrar novamente? <S/N>: "); resposta=getche(); printf("\n "); }while(toupper(resposta)=='S'); } struct jogador *criar( struct jogador *a) { if(a==NULL) { r=(struct jogador*)malloc(sizeof(struct jogador)); if(!r) { printf("\n Nao ha memoria"); exit(1); } strcpy(r->nome,name); strcpy(r->posicao,position); r->escalacao = lineup; r->salario = salary; r->numero = num; r->esq = NULL; r->dir = NULL; if(raiz==NULL) { raiz=r; } return r; } else { if(num>a->numero) { a->dir=criar(a->dir); } else { if(num<a->numero) { a->esq=criar(a->esq); } else { printf("\n Jogador ja cadastrado\n"); system("pause"); return a; } } } fclose(p); return a; } struct jogador *listar(struct jogador *i, int x) { if(i!=NULL&&x==1) { listar(i->esq, x); printf("\t\t\t\n----------\n"); printf("\n-----|%s|-----\n",i->nome); printf("\n-----|%s|-----\n",i->posicao); printf("\n-----|%c|-----\n",i->escalacao); printf("\n-----|%.2f|-----\n",i->salario); printf("\n-----|%i|-----\n",i->numero); listar(i->dir, x); } if(i!=NULL&&x==2) { listar(i->dir, x); printf("\n-----|%i|-----\n",i->numero); listar(i->esq, x); } return i; } struct jogador *all (struct jogador *i) { if(i->esq!=NULL) { all(i->esq); } if(i->dir!=NULL) { all(i->dir); } free(i); if(i==raiz) { raiz=NULL; i=raiz; } return i; } struct jogador *salvar(struct jogador *i) // função que salva os dados no arquivo, esta funcionando. { if(i!=NULL) { salvar(i->esq); p=fopen(time,"a"); strcpy(name,i->nome); strcpy(position,i->posicao); lineup = i->escalacao; salary = i->salario; num = i->numero; fprintf(p,"%s;%s;%c;%f;%i\n",name,position,lineup,salary,num); salvar(i->dir); } fclose(p); } void carregar() // função para ler os arquivos { if((p=fopen(time,"r"))==NULL) { return; } else { while(fscanf(p,"%[^;];%[^;];%c;%f;%i%*c",name,position,&lineup,&salary,&num)!=EOF) { // esse printf foi colocado pra saber quais numeros ele esta lendo. printf("\n-----|%i|-----\n",num); // ele le somente dois cadastros, se tiver mais ele não le, e por isso não joga na função de inserção. pointer=criar(pointer); // chamada da função de inserção, os dois unicos cadastros que são lidos, são inseridos corretamente. } system("pause"); } fclose(p); }  
    • By g.dmatos
      Preciso desenvolver um algoritmo no Visualg, da função y=3x+8, onde, a partir da informação de um valor para a variável independente x, o sistema automaticamente informe o valor da variável dependente y.
       
      porém quando vou executar da erro no código:
      var x, y: real inicio escreval("Digite o valor do coeficiente x") leia(x) Escreval ("O valor da conta é igual a:" + y) Leia (y) y=(3.x)+8 fimdoalgoritmo  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.