Jump to content
Sign in to follow this  
flip88

Apresenta caracteres indesejados

Recommended Posts

flip88

Tenho uma estrutura para os trabalhadores:

typedef struct{
char nome[50];
char morada[100];
struct data data_nasc;
int bi;
int num_interno;
char estado_civil;
int num_titulares;
int num_dependentes;
char delegacao;
float salario_base;
char estado;
}trabalhador;

Preencho:

void AdicionaTrabalhador(trabalhador *p, int dim)
{
dim++;
p[dim]=AcrescentaTrabalhador();
}

trabalhador AcrescentaTrabalhador()
{
trabalhador a;
puts("***** Introduza os dados do cliente *****");
fflush(stdin);
printf("Nome: ");
gets(a.nome);
fflush(stdin);
printf("Morada: ");
gets(a.morada);
fflush(stdin);
printf("Data de Nascimento (dd/mm/aaaa): ");
scanf("%d/%d/%d",&a.data_nasc.dia,&a.data_nasc.mes,&a.data_nasc.ano);
fflush(stdin);
printf("BI: ");
scanf("%d",&a.bi);
fflush(stdin);
printf("Numero interno: ");
scanf("%d",&a.num_interno);
fflush(stdin);
printf("Estado Civil: (Casado: c | Solteiro: s) ");
scanf("%c",&a.estado_civil);
fflush(stdin);
printf("Numero de titulares: ");
scanf("%d",&a.num_titulares);
fflush(stdin);
printf("Numero de dependentes: ");
scanf("%d",&a.num_dependentes);
fflush(stdin);
printf("Delegacao: (Lisboa: l | Porto: p | Coimbra: c | Funchal: f | Ponta Delgada: d) ");
scanf("%c",&a.delegacao);
fflush(stdin);
printf("Regime: (Geral: g | Defeciente: d) ");
scanf("%c",&a.regime);
fflush(stdin);
printf("Salario base: ");
scanf("%f",&a.salario_base);
a.estado='a';
fflush(stdin);
return a;
}

E, quando faço a consulta, os valores dado para os campos nome, morada, etc., apresentam vários caracteres indesejados.

void ConsultaTrabalhador(trabalhador *a)
{
int j;
for(j=0;j<100;j++)
	if(a[j].num_interno!=0)
		printf("\nNome: %s", a[j].nome);
		printf("\nMorada: %s", a[j].morada);
		printf("\nData de Nascimento: %d/%d/%d", a[j].data_nasc.dia,a[j].data_nasc.mes,a[j].data_nasc.ano);
		printf("\nBI: %d", a[j].bi);
		printf("\nNumero Interno: %d", a[j].num_interno);
		printf("\nEstado Civil: %s", a[j].estado_civil);
		printf("\nNumero de Titulares: %d", a[j].num_titulares);
		printf("\nNumero de Dependentes: %d", a[j].num_dependentes);
		printf("\nDelegacao: %d", a[j].delegacao);
		printf("\nSalario Base: %f", a[j].salario_base);
system("pause");
}

Qual é o problema do código?

Share this post


Link to post
Share on other sites
zpgm

Boas,

Estás a passar um ponteiro para trabalhador, à função

void AdicionaTrabalhador(..)

e estás a inicializá-lo através da função

trabalhador AcrescentaTrabalhador()

esta deverá devolver também um ponteiro

trabalhador *AcrescentaTrabalhador(){
     trabalhador a;
     (...)
     return &a;
}

Cumps,

ZP.

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
Sign in to follow this  

×
×
  • Create New...

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.