Ir ao conteúdo
  • Cadastre-se
Devair Augusto da Silva

C Como armazenar e imprimir dados de um arquivo

Recommended Posts

Olaa.

 

Minha duvida é sobre como faço para salva um dado de um arquivo.txt em uma struct varias vezes, abaixo a ideia de como tenho que fazer

 

typedef struct escola{

char sexo; \\H ou M para o sexo

int idade;

char nome[30];

} Escola;

 

Ai como eu faria para armazenar os dados que eu recebo de um arquivo.txt? Eu queria tentar armazenar em um vetor de Escola.

 

O dados do arquivo.txt seriam tipo assim

 

M 18 Maria

H 21 Jose

M 30 Ana Vitoria

M 15 Sophia

...

 

Se alguém poder me ajudar ficarei muito grato.

Obrigado.

 

 

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Devair Augusto da Silva    Ola ,  depois que voce abrir o arquivo txt voce pode usar o fscanf  que pega os dados no arquivo ate encontrar um espaco , e entao assim que pegar cada dado do arquivo voce coloca na variavel da struct ,  assim :

Escola esc[1000];
while(dado1 != eof){
   fscanf(arq,"%c",&dado1);
   esc[cont].sexo = dado1;
   fscanf(arq,"%d",&dado2);
   esc[cont].idade = dado2;
   fscanf(arq,"%s",dado3);
   strcpy(esc[cont].nome , dado3);
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010  Eu não consegui entender o que você fez ali muito bem, mais tentei fazer algo assim:

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

typedef struct escola{
char sexo;//H ou M para o sexo
int idade;
char nome[30];
}Escola;

void main() {
    int i=0;
    
    //printf("teste111\n");
    Escola *p;
    p = malloc(sizeof(int));
    
    FILE *arquivo;
    arquivo = fopen("arquivo1.txt", "r");
    
    if(arquivo != NULL){
        printf("arquivo aberto!\n");
            
    //printf("teste2222\n\n");
    
   
    while(i < 10){
        printf("Passada[%d] \n",i);
        fscanf(arquivo,"%c",&p->sexo);
        fscanf(arquivo,"%d",&p->idade);
        fscanf(arquivo,"%s",&p->nome);
               
        //printf("teste3333\n");
        printf("%c %d %s\n",p->sexo, p->idade, p->nome);
        i++;
    }
    
    fclose(arquivo);
    }
    else{ 
        printf("Nao foi possivel abrir o arquivo");
        return;
    }
}

porém ele começa a armazenar certo mais na segunda fez que ele entra no While ela não armazena corretamente 😐 e na sequencia certa do arquivo1.txt.

 

O arquivo1.txt está assim:

 

m 18 Maria
h 21 Jose
m 30 Ana Vitoria
m 15 Sophia
h 20 Marcelo
h 20 Devair
h 20 Ana Flavia
m 25 Haryane
m 17 Ana 
m 50 Jandira

 

Ahh estou fazendo em C.

se puder me da um ajuda agradeço 

 

Obrigado :)

 

 

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Devair Augusto da Silva Bom peguei esse código e fiz umas alterações e nos meus testes deu certo, teste ai e me diz se deu certo ou não

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

typedef struct escola{

    char sexo;
    int idade;
    char nome[30];

}Escola;

void main(){

    Escola p;

    FILE *arquivo;
    arquivo = fopen("arquivo1.txt", "r");

    if(arquivo == NULL){
         printf("Nao foi possivel abrir o arquivo");
        return;
    }

    while(1){

        if(feof(arquivo)) break;

        fscanf(arquivo, "%c%d%[^\n]\n", &p.sexo, &p.idade, p.nome);
        printf("\np.sexo -> %c\np.idade -> %d\np.nome -> %s\n---------------------------", p.sexo, p.idade, p.nome);

    }

    fclose(arquivo);

}

lendo com %s tava dando errado, mudei para ler até achar uma quebra de linha, e logo após li essa quebra de linha e depois irá ler as próximas linhas, até acabar o arquivo

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Era isso mesmo meu caro. Testei aqui e deu certo.

Agora irei tentar colar em um vetor para que possa acessar as posições separadamente.

Tipo posição 3 e imprimir : m 15 Sophia

 

Obrigado.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu primeiro faço o cadastro para depois fazer o armazenamento. Segue o código:

 

#include <stdio.h>

struct dados{
	char nome[25];
	int idade;
};
typedef struct dados DADOS;

DADOS cadastrar(){
	DADOS novo;
	
	system("cls");
	fflush(stdin);
	
	puts("Nome: ");
	gets(novo.nome);
	fflush(stdin);
	
	puts("Idade: ");
	scanf("%i", &novo.idade);
	
	return novo;
	
}

void main(){
	
	//Declarações
	
	int op;
	DADOS d;
	
	//Instruções
	
	do{
		puts("1 - cadastrar");
		puts("2 - listar");
		scanf("%i", &op);
		switch(op){
			case 1:
				d=cadastrar();
				armazenar(d);
			break;
			
			case 2:
				listar(d);
			break;
		}
	}while(1);
}

void armazenar(DADOS a){
	
	FILE *arq;
	
	if((arq=fopen("dados.txt", "ab"))==0){
		puts("ERRO");
	}else{
		fwrite(&a, sizeof(DADOS), 1, arq);
		
		fclose(arq);
	}
	
	
}

 

 

Função para listar:

 

void listar(DADOS l){
	
	FILE *arq;
	
	if((arq=fopen("dados.txt", "rb"))==0){
		puts("ERRO");
	}else{
		while(fread(&l, sizeof(DADOS), 1, arq)){
			printf("%s %i", l.nome, l.idade);
		}
	}
	
}

 

  • Curtir 2
  • 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

×