Ir ao conteúdo
  • Cadastre-se
Sil Ks

C Leitura de dado armazenado em txt

Recommended Posts

Preciso criar um programa que leia dados do teclado, armazene em arquivo, e depois permita a alteração desses dados armazenados. Para tanto preciso escrever o nome do funcionário, localiza-lo no arquivo e aí selecionar qual dado quero modificar. Estou tendo dificuldade nesta parte, pois não estou conseguindo encontrar o funcionário pelo nome. Não sei exatamente em que parte estou errando.

prova.txt

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Sil Ks      para postar seu código é melhor usar o botão  <> que está lá na barra de ferramentas da janela de postar ,  pois senão seu código fica faltando alguns caracteres ,  e  esse txt que está nesse link está complicado de usar pois está  gravado tudo junto numa mesma linha ,  e seu código está bom  e parece que você está usando Linux pois no código tem o comando system("clrear"); e eu uso windows então coloquei "cls"  e para ler arquivo txt você precisa usar o comando fscanf e lendo arquivo txt ele só consegue ler string , e então seu código com algumas modificações ficou assim  :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
/*#include "teste.h"*/
#define MAX 100
int i, tam, posicao;
char nome[50];
int salario, familia, idade;
float peso, altura, renda, media;
typedef struct // Cria uma STRUCT para armazenar os dados de uma pessoa
{
    char  nome[50]; 
    // char* nome dá falha de segmentação
    int   salario;
    int   familia;
    int   idade;
    float peso;
    float altura;
} Pessoa; // Define o nome do novo tipo criado

Pessoa func[MAX];

void inicio();
int menu();
void cadastro();
int menu_op_2();
int menu_op_3();
void leitura();
int altera_salario(); 
int altera_altura(); 
int altera_peso(); 
int altera_idade();
int altera_familia();
int listar();
using namespace std;
int contador;

int main(){
    int op;
    int op2;
    int op3;
    inicio();
    do{
        op=menu();
        switch(op){
        case 01: 
            cadastro();
            break;
        case 02:
            menu_op_2();
            break;
        case 03:
            menu_op_3(); 
            break;
        case 04: 
            listar();
            break;
        default:
            printf("\nOpcão invalida!!!\n\n "); 
            break;
        } 
    } while (op!=0);
    return 0;
}
/*
=============================================================
=                 Menu Principal
=============================================================
*/
int menu(){
    int opcao;
    system("cls");
    do {
        printf("\n        ======= Menu =======\n\n");
        printf("1 - Cadastrar dados\n");
        printf("2 - Alterar dados\n");
        printf("3 - Relatorios\n");
        printf("4 - Listar Todos\n");
        printf("0 - sair do programa.\n\n");
        printf("Escolha um opcao: \n");
        scanf("%d", &opcao);
        /*if (opcao > 3 || opcao < 0){
            system("cls");
            printf("\nOpcão invalida!!!\n\n "); 
        }*/
    }while (opcao > 4 || opcao < 0);
    return opcao;
}
/*
=============================================================
=                 Funções Cadastrar dados
=============================================================
*/
void cadastro(){ 
    // cadastrar dados
    FILE *cadastrar;
    cadastrar=fopen("Dados2.txt", "a");	
    printf ("Quantidade de funcionários %d\n\n",contador-1);
    for(i=0; i<contador; i++) 
    // leitura a partir do teclado
    {
            printf(" Nome do funcionario: ");
            scanf(" %[^\n]s", func[i].nome);
            fputs(func[i].nome, cadastrar);
            printf(" Salario: ");
            scanf("%d", &func[i].salario);
            fprintf(cadastrar, " %d ", func[i].salario); 
            printf(" Nro de familiares: ");
            scanf("%d", &func[i].familia);
            fprintf(cadastrar, " %d ", func[i].familia); 
            printf(" Idade: ");
            scanf("%d", &func[i].idade);
            fprintf(cadastrar, " %d ", func[i].idade); 
            printf(" Peso: ");
            scanf("%f", &func[i].peso);
            fprintf(cadastrar, " %0.3f ", func[i].peso); 
            printf(" Altura: ");
            scanf("%f", &func[i].altura);
            fprintf(cadastrar, " %0.2f\n ", func[i].altura); 
            printf(" \n ");
       }
        printf("Dados armazenados\n");
            //impressão para teste
	{
            printf(" \n Funcionario: %s ", func[i].nome);
            printf(" \n Salario: %d ", func[i].salario);
            printf(" \n Familia: %d ", func[i].familia);
            printf(" \n Idade: %d ", func[i].idade);
            printf(" \n Peso: %0.3f ", func[i].peso);
            printf(" \n Altura: %0.2f ", func[i].altura);
            printf(" \n ");
       }

        fclose(cadastrar);
    }
/*
    =============================================================
    =                 Menu Alterar dados
=============================================================
*/
int menu_op_2(){
    printf(" \n Digite um nome : ");
    scanf(" %[^\n]s", nome);
    posicao=0;
    for(i=0; i<contador; i++)
    {
        if(strcmp(nome, func[i].nome)== 0) {
            posicao = i;
            break;
        } 
    }
    if(posicao = 0) {
        printf(" Registro não encontrado!\n ");
   } 
   else{
        printf("\n Registro encontrado! "                               );
        printf(" \n Trabalhador --------: %s"    , nome                 );
        printf(" \n Salario ------------: %d "   , func[posicao].salario);
        printf(" \n Nro familiares -----: %d "   , func[posicao].familia);
        printf(" \n Idade --------------: %d "   , func[posicao].idade  );
        printf(" \n Peso ---------------: %0.3f ", func[posicao].peso   );
        printf(" \n Altura -------------: %0.2f ", func[posicao].altura );
        printf(" \n -------------------------------------------------\n");
        leitura();
   }
   printf("    Tecle !");
   getch();

}
void leitura(){
    FILE *cadastrar;
    cadastrar = fopen("Dados2.txt","r+");
    int opcao2;
    printf("======= O Que Deseja Alterar =======\n");
    printf("\n");
    printf("1 - Alterar nome\n");
    printf("2 - Alterar salario\n");
    printf("3 - Alterar altura\n");
    printf("4 - Alterar peso\n");
    printf("5 - Alterar idade\n");
    printf("6 - Alterar familia\n");
    printf("0 - Retornar ao menu principal.\n\n");
    printf("Escolha um opcao: \n");
    scanf("%d", &opcao2);
    if (opcao2 > 6 || opcao2 < 0){
        system("clear");
        printf("\nOpcão invalida!!!\n\n ");
        return leitura(); 
        // retorna ao menu alterar
    }
    if (opcao2 < 7 && opcao2 > 0){
        do{
            system("clear");
            switch(opcao2){
            case 1: 
                setbuf(stdin, NULL);
                printf("Informe novo nome: ");
                fgets(nome, 50, stdin);
                fputs(nome, cadastrar);					 
                break;
           case 2: 
                altera_salario(); 
                break;
            case 3: 
                altera_altura(); 
                break;
            case 4: 
                altera_peso(); 
                break;
            case 5: 
                altera_idade(); 
                break;
            case 6:
                altera_familia(); 
                break;
            }
           //espera enter	
        }while(opcao2 > 6 || opcao2 < 0);
        return leitura();
    }
}
int menu_op_3(){

}
int altera_salario(){
    
}
int altera_altura(){
    
}
int altera_peso(){
    
}
int altera_idade(){
    
}
int altera_familia(){
    
}
void inicio(){
    int j=0;
    char a[10],b[10],c[10],d[10],e[10];
    FILE *fp;
    fp = fopen("Dados2.txt","r+");
    if(fp!=NULL)
    while( fscanf(fp,"%s %s %s %s %s %s",func[j].nome,a,b,c,d,e ) != EOF ){
        func[j].salario = atoi(a)    ;
        func[j].familia = atoi(b)    ;
        func[j].idade   = atoi(c)    ;
        func[j].peso  =(float)atoi(d);
        func[j].altura=(float)atoi(e);
        
        printf("nome ----: %s\n"    ,func[j].nome   );
        printf("salario -: %d\n"    ,func[j].salario);
        printf("familia -: %d\n"    ,func[j].familia);
        printf("idade ---: %d\n"    ,func[j].idade  );
        printf("peso ----: %.2f\n"  ,func[j].peso   );
        printf("altura --: %.2f\n\n",func[j].altura );
        
        j++;
    }
    else
    printf("Erro No Arquivo, Nao Pode Abrir . . .!"  );
    printf("Aqui estão Todos Os Cadastros\n"         );
    printf("  Guardados Na Struct\n\n      Tecle !\n");
    contador=j;
    getch();
    fclose(fp);
}
int listar(){
    int j;
    system("cls");
    printf("  Todos Os Cadastros\n\n");
    for(j=0;j<contador;j++){
        printf("nome ----: %s\n"    ,func[j].nome   );
        printf("salario -: %d\n"    ,func[j].salario);
        printf("familia -: %d\n"    ,func[j].familia);
        printf("idade ---: %d\n"    ,func[j].idade  );
        printf("peso ----: %.2f\n"  ,func[j].peso   );
        printf("altura --: %.2f\n\n",func[j].altura );
    }
    printf("    Tecle !");
    getch();
}

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Erro meu. Achei que ficaria melhor para visualizar seu eu mandasse em txt, mas nas próximas sigo teu conselho. obrigado pela ajuda, vou fazer as modificações pra testa-lo no linux... muito obrigado

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×