Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

JoaoSkate

[Resolvido] Passagem de estruturas para funções

Recommended Posts

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 :)

Edited by JoaoSkate

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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 !!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.