Ir ao conteúdo

Posts recomendados

Postado

Olá, sou novo em C e estou tendo um problema.Não sei se é possível preencher um vetor com dados que são lidos de um arquivo .txt e retornar esse vetor preenchido para ser manipulado na main do meu programa.

Tenho a seguinte struct:

typedef struct { 
	char name[50]; 
	int CNH; 
	double pontos; 
}cliente;

E o procedimento:

void preencherDadosCliente();

Minha primeira dúvida é se eu consigo retornar no procedimento algo como:

cliente[ ] preencherDadosCliente();

Esse procedimento tá implementado da seguinte forma:

void preencherDadasCliente(){ 
	//variável do tipo FIle 
	FILE *file; file = fopen("Clients.txt", "r");//abrir o arquivo apenas para leitura 
	cliente dados[16]; //vetor que vai receber em cada posição uma linha do arquivo lido 
	int i = 0; //ler o arquivo e preenche o array 
	for( i;fscanf(file, "%49[^,],%d,%lf", dados[i].name, &dados[i].CNH, &dados[i].pontos) != -1;i++){ } 				printf("Número de linhas: %d", i); fclose(file); 
}

 

Minha segunda dúvida é se tem um jeito mais inteligente de preenche esse vetor do tipo cliente. A baixo segui como os dados estão no arquivo.txt

Cliente1,15345,220.00 
Cliente2,16345,109.00 
Cliente3,17345,586.00
Cliente4,18345,0.00
Cliente5,19345,78945678.00 
Cliente6,12145,457878.00
Cliente7,12245,182893872.00 
Cliente8,12345,0.00 
Cliente9,12445,10.00 
Cliente10,1534,1000.00 
Cliente11,1634,2000.00 
Cliente12,1734,2500.00
Cliente13,1834,35000.00 
Cliente14,1914,4000.00 
Cliente15,1034,40.00 
Cliente16,9214,250.00

 

  • Curtir 1
Postado
  Em 12/05/2022 às 15:22, Rafael Santos de Lima disse:

Não sei se é possível preencher um vetor com dados que são lidos de um arquivo .txt e retornar esse vetor preenchido para ser manipulado na main do meu programa.

Expandir  

 

Sim, programas são para isso: resolver coisas práticas.

 

typedef struct { 
	char name[50]; 
	int CNH; 
	double pontos; 
}cliente;

 

Escreva em torno dos dados. Seus dados não são isso. Como você mesmo disse e mostrou tem uma série de Cliente. Use uma convenção para os nomes que você define. Uma usual é reservar a primeira letra em maiúscula para esses nomes. Assim no programa saberá que se trata de algo composto.

 

  Em 12/05/2022 às 15:22, Rafael Santos de Lima disse:

Minha primeira dúvida é se eu consigo retornar no procedimento algo como:

cliente[ ] preencherDadosCliente();

Expandir  

 

Não. Não pode.

 

Se usa algo assim:

 


typedef struct
{
    char   name[50];
    int    CNH;
    double pontos;

}   Cliente;

typedef struct
{
    unsigned limite;
    unsigned size;
    Cliente* cl;

}   Cadastro;

Cadastro* le_clientes(const char* arquivo);

int main(void) { return 0; }

 

Que é bem mais simples: passa o nome do arquivo no disco e recebe o endereço de um cadastro com tudo o que foi lido.

 

Cliente1,15345,220.00 
Cliente2,16345,109.00 
Cliente3,17345,586.00
Cliente4,18345,0.00

 

Isso é chamado arquivo csv e é o formato mais comum de intercambio de dados. Tem mais de 40 anos e precede a internet e os computadores pessoais. É aceito por bancos de dados, planilhas e programas de impressão de etiquetas para mala direta desde quando mail não era e-mail 🙂 

 

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades sobre tecnologia do Brasil. Leia mais

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!