Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

JoaoSkate

[Resolvido] Passagem de estruturas para funções

Mensagens Recomendadas

JoaoSkate    0
JoaoSkate

Boa tarde,

Eu estou a aprender C, seguindo o livro linguagem C do prof. Luis Damas.

A dada altura existe um exercicio que nos pede para escrever uma função que permita escrever no ecrã os valores existentes numa estrutura recebida como argumento.

Inicialmente consegui fazer o programa sem grandes problemas, aqui deixo o código:

#include <stdio.h>

typedef struct
{
	int dia, mes, ano;
} DATA;

typedef struct p_pessoa
{
	char nome[100];
	int idade;
	float salario;
	DATA nasc;
} PESSOA;

void mostrar(PESSOA x)
{
	printf("Nome: %s\n",x.nome);
	printf("Idade: %d\n",x.idade);
	printf("Salario: %.2f\n",x.salario);
	printf("Data de Nascimento: %d / %d / %d\n", x.nasc.dia, x.nasc.mes, x.nasc.ano);
}

int main()
{


PESSOA p = {"Carlos",20,0,{14,5,1860}};
mostrar(p);
return 0;
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

O código funcionou, mas eu tentei fazer nao para o caso particular PESSOA p = {"Carlos",20,0,{14,5,1860}}; e sim para o caso em que o utilizador insere os dados na consola, e o meu programa ficou com o seguinte aspeto:

#include <stdio.h>

typedef struct
{
	int dia, mes, ano;
} DATA;

typedef struct p_pessoa
{
	char nome[100];
	int idade;
	float salario;
	DATA nasc;
} PESSOA;

void mostrar(PESSOA x)
{
	printf("Nome: %s\n",x.nome);
	printf("Idade: %d\n",x.idade);
	printf("Salario: %.2f\n",x.salario);
	printf("Data de Nascimento: %d / %d / %d\n", x.nasc.dia, x.nasc.mes, x.nasc.ano);
}

int main()
{
char v[100];
int age;
float salary;
int day, month, year;

printf("Nome: "); scanf("%s",v);
printf("Idade: "); scanf("%d",&age);
printf("Salario: "); scanf("%f",&salary);
printf("Data de Nascimento: ");	scanf("%d-%d-%d",&day,&month,&year);

PESSOA p = {"v",age,salary,{day,month,year}};
mostrar(p);
return 0;
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

O programa compila e não me dá nenhum erro, no entanto o output nao é o que eu espera uma vez que em vez de apareçer o nome introduzido na consola apareçe a variavel v em nome (nao sei se me fiz entender), por exemplo se aos printfs seguidos de scanf eu "responder":

Nome : malaquias

Idade : 20

Salario: 0

Data de Nascimento: 09-09-90

o output saí:

Nome : v

Idade : 20

Salario: 0

Data de Nascimento: 09-09-90

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Eu penso que o erro está nesta linha: PESSOA p = {"v",age,salary,{day,month,year}}; em vez de "v" eu já experimentei apenas v, mas também não funcionou.

Já agora como se coloca código aqui no fórum, isto é, dentro de uma caixa?

Se alguém tiver paciência para ler isto tudo, agradeço.

Obrigado :)

Editado por JoaoSkate

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo    1151
HappyHippyHippo

o teu problema é tão simples como este:

int main()
{
 PESSOA p;

 printf("Nome: ");
 scanf("%s", p.nome);

 printf("Idade: ");
 scanf("%d", &p.idade);

 printf("Salario: ");
 scanf("%f", &p.salario);

 printf("Data de Nascimento: ");
 scanf("%d-%d-%d", &p.nasc.dia, &p.nasc.mes, &p.nasc.ano);

 mostrar(p);
 return 0;
}

------

ps:

colocação de código não será mais do que adicionar as tas

 antes e depois do código (respectivamente)

para o caso de apresentação de código de C, então terás também de dizer que o conteúdo é para ser apresentado como código em C : [code=c ] ... [/code ]

(obviamente, isto tudo sem os espaços)


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoaoSkate    0
JoaoSkate

o teu problema é tão simples como este:

int main()
{
 PESSOA p;

 printf("Nome: ");
 scanf("%s", p.nome);

 printf("Idade: ");
 scanf("%d", &p.idade);

 printf("Salario: ");
 scanf("%f", &p.salario);

 printf("Data de Nascimento: ");
 scanf("%d-%d-%d", &p.nasc.dia, &p.nasc.mes, &p.nasc.ano);

 mostrar(p);
 return 0;
}

------

ps:

colocação de código não será mais do que adicionar as tas

 antes e depois do código (respectivamente)

para o caso de apresentação de código de C, então terás também de dizer que o conteúdo é para ser apresentado como código em C : [code=c ] ... [/code ]

(obviamente, isto tudo sem os espaços)

Muito rápido a responder, obrigado pela ajuda !!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.