Ir ao conteúdo
  • Cadastre-se
Infante98

C Dificuldade em Programa com Estruturas

Posts recomendados

Boa noite, estou a ter a cadeira de programação na faculdade e estou com algumas dificuldades em fazer um programa com estruturas. Podem dar uma ajuda?

O enunciado segue em pdf no anexo (É o programa 1 do pdf).

 

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


typedef struct // Definição da Estrutura "Endereço"
{
	char rua[50];
	int numero;
	char cidade[30];
	char codigo_postal[8];
	
}tipo_endereco;


typedef struct // Definição da Estrutura "Pessoal"
{
	char nome[50];
	int telefone;
	tipo_endereco endereco;
}ficha_pessoal; 


int main()

{



	system("pause");
}

 

PC_Prat_Estruturas.pdf

Compartilhar este post


Link para o post
Compartilhar em outros sites

Belê, mas a dificulta está na hora de inserir os dados?

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, como faço para dar scanf numa estrutura e depois de inserir os dados imprimir tudo na tela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahh, show então o código fica assim:

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


typedef struct // Definição da Estrutura "Endereço"
{
	char rua[50];
	int numero;
	char cidade[30];
	char codigo_postal[8];
	
}tipo_endereco;


typedef struct // Definição da Estrutura "Pessoal"
{
	char nome[50];
	int telefone;
	tipo_endereco endereco;
}ficha_pessoal; 


int main()

{
	ficha_pessoal funcionario;
	
	printf("Digite o nome do funcionario: ");
	scanf("%s", funcionario.nome);
	
	printf("Digite a rua do funionario:");
	scanf("%s", funcionario.endereco.rua);
	
	printf("Nome do funcionario: %s", funcionario.nome);
	printf("Rua do funcionario: %s", funcionario.endereco.rua);


	system("pause");
}

 Lembrando que só fiz um exemplo, você tem que terminar de fazer mas segue o mesmo padrão!

 

Você declara a estrutura dentro da main dando um nome a ela, lembrando que se for mais de um funcionário você pode colocar [x] e no lugar do "x" escrever a quantidade como um vetor. : )

ai pra utilizar nos printfs, scanfs e até dentro dos fors ou whiles é só usar o nome que você deu e um "." e o que você quiser atribuir (nome,rua,numero) ! Caso for 2 estruturas deve-se colocar o nome dado na main "." o nome dado na estrutura que você declarou a outra "." o nome da outra..

Entendeu?

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi na perfeição, excelente explicação! Obrigado pela ajuda!

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde, depois de conseguir fazer o primeiro programa do pdf estou a tentar fazer o segundo mas não estou a conseguir. Tentei fazer um ciclo for mas não sei se está correto. Alguma ajuda?

/*Repita o programa anterior criando um vector que permita guardar até 20 contactos.
O programa deverá:

o pedir o número de contactos a inserir
o permitir inserir os n contactos
o perguntar qual o número do contacto que pretende visualizar
o mostrar contacto pretendido
o repetir todo o processo se o utilizador assim o desejar*/

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


typedef struct // Definição da Estrutura "Endereço"
{
	char rua[50];
	char numero[3];
	char cidade[30];
	char codigo_postal[9];

}tipo_endereco;


typedef struct // Definição da Estrutura "Pessoal"
{
	char nome[50];
	int telefone[9];
	tipo_endereco endereco;

}ficha_pessoal;


int main()

{
	ficha_pessoal funcionario[20];
	void funcionarios(ficha_pessoal funcionario[20]);
	funcionarios(0);

	//-------------------------------------------------------------------------------------------------//
	printf("\n--------------------------------------------------------------------------\n");
	printf("\n--------------------------------------------------------------------------\n");
	//-------------------------------------------------------------------------------------------------//

	printf("\n Nome do funcionario: %s", funcionario[20].nome);  // Print das informações inseridas
	printf("\n Telefone do funcionario: %s", funcionario[20].telefone);
	printf("\n Rua do funcionario: %s", funcionario[20].endereco.rua);
	printf("\n Numero do funcionario: %s", funcionario[20].endereco.numero);
	printf("\n Codigo Postal do funcionario: %s", funcionario[20].endereco.codigo_postal);
	printf("\n Cidade do funcionario: %s \n\n", funcionario[20].endereco.cidade);


	system("pause");
}


void funcionarios(ficha_pessoal funcionario[20])
{
	int n;

	printf("\n Quantos Contactos Pretende Inserir? \n");
	scanf("%i", &n);

	for (int i = 0; i < n; i++)
	{
		printf("Digite o Nome do funcionario: ");           // Estrutura Pessoal
		scanf("%s", funcionario[20].nome);                   
		
		printf("Digite o Telefone do funcionario: ");       // Estrutura Pessoal
		scanf("%s", funcionario[20].telefone);
		
		printf("Digite a Rua do funionario: ");             // Estrutura Endereço
		scanf("%s", funcionario[20].endereco.rua);

		printf("Digite o Numero da Rua do funionario: ");   // Estrutura Endereço
		scanf("%s", funcionario[20].endereco.numero);

		printf("Digite o Codigo Postal do funionario: ");   // Estrutura Endereço
		scanf("%s", funcionario[20].endereco.codigo_postal);

		printf("Digite a Cidade do funionario: ");          // Estrutura Endereço
		scanf("%s", funcionario[20].endereco.cidade);
	}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
/*Repita o programa anterior criando um vector que permita guardar até 20 contactos.
O programa deverá:

o pedir o número de contactos a inserir
o permitir inserir os n contactos
o perguntar qual o número do contacto que pretende visualizar
o mostrar contacto pretendido
o repetir todo o processo se o utilizador assim o desejar*/

 

1 hora atrás, Infante98 disse:

depois de conseguir fazer o primeiro programa do pdf estou a tentar fazer o segundo mas não estou a conseguir. Tentei fazer um ciclo for mas não sei se está correto

 

Não entendi. Primeiro você diz que não conseguiu e depois que não sabe se está correto.

Se você sabe que não conseguiu sabe que não está correto. Você listou 5 itens no início. Seu programa está funcionando para qual deles?

 

Devia postar outro tópico para outro problema, assim é mais fácil de alguém ver e poder ajudar.

E postar um link com um pdf e o número do problema é um pouco chato para alguém que quer ajudar. Precisa clicar num link, baixar um anexo, abrir em outro programa...
 

Compare com isso:
 

trecho.thumb.png.4b41f9d8b697992b4f28b79e638e4010.png



E isso
 

trecho2.png.7e1c9dd1f864206a4d1e022d045b6860.png

 

Pronto. Teria todo o necessário aqui.

Note que o título

Sumário: Representações estruturadas de dados não homogéneos.

 

Não faz sentido. Para uma struct{} tanto faz se os dados são homogêneos ou não. Trata-se apenas da função de agregar dados em um registro.

 

É mesmo essa a grafia aí: homogéneos e não homogêneos?


Sobre seu programa número dois:

 


Você está perguntando ANTES quantos contatos vai processar. Isso não condiz com o enunciado: 
 

1 hora atrás, Infante98 disse:

repetir todo o processo se o utilizador assim o desejar

 

O utilizador pode consultar dois contatos e depois querer ver outro sem saber antes que queria ver 3. Apenas coloque uma opção no menu para terminar as consultas.

 

O número que você pergunta antes é o total de contatos a inserir, Depois de inseridos os N contatos --- até 20 --- você deve usar outro loop para permitir as consultas enquanto o usuário quiser, ou mesmo inserir algum outro contato.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelas dicas, no próximo post vou implementar.

 

Quanto ao programa, o meu objetivo é fazer os cinco pontos propostos:

 

-pedir o número de contactos a inserir;

-permitir inserir os n contactos;

-perguntar qual o número do contacto que pretende visualizar;

-mostrar contacto pretendido;

- repetir todo o processo se o utilizador assim o desejar.

 

Não consigo entender como vou fazer isso tudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda está um pouco longe de funcionar...

 

funcionarios(0);

Que pretende com essa linha?

 

	for (int i = 0; i < n; i++)
	{
		printf("Digite o Nome do funcionario: ");           // Estrutura Pessoal
		scanf("%s", funcionario[20].nome);                   
		
		printf("Digite o Telefone do funcionario: ");       // Estrutura Pessoal
		scanf("%s", funcionario[20].telefone);	
      
      
      ...

E aqui?

 

Você reservou um índice para ler os funcionários, esa variável 'i'. Mas está sempre usando o índice ]20] que sequer existe, já que eles vão de 0 a 19 inclusive.  Era pra usar o indice

 

Acho que não precisa ler todos os 20 sempre ou vai levar uma época pra testar isso. Melhor você permitir que o cara entre com um e pergunte se ele quer ler mais, até 20.

 

Melhor ainda seria você não ler nenhum noo começo. Apenas crie dois constantes e termine o programa.

 

O enunciado é tão ruim que além de ter aquele título sem sentido mostra uma descrição de endereço com 5 campos e a estrutura com 4... Sumiu o bairro.

 

Então você lê até os 20 ou até o usuário dizer que não quer mais entrar com contatos. E aí mostras essas operações para ele e executa até ele dizer que quer terminar....

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou te mostrar um programa que endereça essas coisas, usando recortar e colar e seu próprio código.


Só pra te mostrar como declarar e passar parâmetros e tal. É só um exemplo bem primário para tentar ajudar.

 

Mudei um pouco a declaração das estruturas para ficar mais legível. Preste atenção às diferenças.
 

O programa preenche dois registros em main() e passa para uma função mostrar na tela. Depois tem uma outra só pra tratar o conjunto. Não tem nenhum sentido prático. Só pra você entender.

 

Eis o que sai na tela
 

Nome: Primeiro
Telefone +55 (12) 9 1234-5678
Endereco
Rua: Rua um
Numero: 1234
Bairro: Vila 1
Cidade: Cidade 1
CEP: 32000-123

Nome: Segundo
Telefone +56 (34) 9 8765-4321
Endereco
Rua: Rua Dois
Numero: 45
Bairro: Jardim 2
Cidade: Cidade 23
CEP: 12345-678

Nome do primeiro funcionario: Primeiro
CEP do segundo funcionario: 12345-678


E o programa

 

/*Repita o programa anterior criando um vector que permita guardar ate 20 contactos.
O programa devera:

o pedir o numero de contactos a inserir
o permitir inserir os n contactos
o perguntar qual o numero do contacto que pretende visualizar
o mostrar contacto pretendido
o repetir todo o processo se o utilizador assim o desejar*/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct s_endereco
{
	char rua[50];
	char numero[6];
	char bairro[30];
	char cidade[30];
	char codigo_postal[10];
};
typedef struct s_endereco Endereco;

struct s_pessoal
{
	char nome[50];
	char telefone[25];
	Endereco endereco;
};
typedef struct s_pessoal Pessoal;

void funcionarios(Pessoal[]);
void mostra(Pessoal);

int main()
{
	Pessoal		cadastro[20];
	// primeiro
	strcpy(cadastro[0].nome, "Primeiro");
	strcpy(cadastro[0].telefone, "+55 (12) 9 1234-5678");
	strcpy(cadastro[0].endereco.rua, "Rua um");
	strcpy(cadastro[0].endereco.numero, "1234");
	strcpy(cadastro[0].endereco.bairro, "Vila 1");
	strcpy(cadastro[0].endereco.cidade, "Cidade 1");
	strcpy(cadastro[0].endereco.codigo_postal, "32000-123");

	// segundo
	strcpy(cadastro[1].nome, "Segundo");
	strcpy(cadastro[1].telefone, "+56 (34) 9 8765-4321");
	strcpy(cadastro[1].endereco.rua, "Rua Dois");
	strcpy(cadastro[1].endereco.numero, "45");
	strcpy(cadastro[1].endereco.bairro, "Jardim 2");
	strcpy(cadastro[1].endereco.cidade, "Cidade 23");
	strcpy(cadastro[1].endereco.codigo_postal, "12345-678");

	mostra(cadastro[0]);
	mostra(cadastro[1]);

	funcionarios(cadastro);

	return;
}

void		mostra(Pessoal funcionario)
{
 	printf("\n");
	printf("Nome: %s\n", funcionario.nome);
	printf("Telefone %s\n", funcionario.telefone);

	printf("Endereco\n");
	printf("Rua: %s\n",     funcionario.endereco.rua);
	printf("Numero: %s\n",  funcionario.endereco.numero);
	printf("Bairro: %s\n",  funcionario.endereco.bairro);
	printf("Cidade: %s\n",  funcionario.endereco.cidade);
	printf("CEP: %s\n",     funcionario.endereco.codigo_postal);

	return;
};	// mostra()

void funcionarios(Pessoal f[20])
{
	printf("\n");
	printf("Nome do primeiro funcionario: %s\n", f[0].nome);
	printf(
		"CEP do segundo funcionario: %s\n",
		f[1].endereco.codigo_postal);
	return;
};	// funcionarios()

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda!

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

×
×
  • Criar novo...

Aprenda_a_Ler_Resistores_e_Capacitores-capa-3d-newsletter.jpg

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!