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

Rui Martins

Preencher Array de Estruturas

5 mensagens neste tópico

Boas,

tenho o seguinte código:

struct alunos{				
	char nome_aluno[NA];
	char codigo_aluno[CA];
	int idade_aluno;
};


main()
{		
int i, quantidade_alunos;
struct alunos ARR[MAX_AL];

				printf("Introduza numero de alunos a adicionar:");
				scanf("%d", &quantidade_alunos);				
					for(i=0;i<quantidade_alunos;i++)
						{
							printf("Nome do Aluno:\n");
							gets(ARR[i].nome_aluno);

							printf("Idade:");
							scanf("%d", &(ARR[i].idade_aluno));

							printf("Codigo Aluno:\n");
							gets(ARR[i].codigo_aluno);

				}	

}

tal como menciono no titulo do post pretendo preencher este array de estruturas...acontece que compilo, executo, e o único valor que me preenche é a idade...alguém me pode dar uma ajuda? sou bastante novo nisto de programação  :-[

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema é que apos introduzires um numero, no buffer de teclado fica guardado o ENTER que introduzes após o número, depois quando vais ler o nome o programa lê esse ENTER e pensa que esse é o nome.

A solução para isso é limpar o buffer de teclado após qualquer leitura (principlamente depois de usar o scanf quando depois disso usas o gets). A limpeza do buffer de teclado é feita com a função "fflush(stdin);".

Assim podes fazer uma coisa do género:

printf("Introduza numero de alunos a adicionar:");
scanf("%d", &quantidade_alunos);
fflush(stdin);

for(i=0;i<quantidade_alunos;i++)
{
    	printf("Nome do Aluno:\n");
    	gets(ARR[i].nome_aluno);
    	fflush(stdin);

    	printf("Idade:");
    	scanf("%d", &(ARR[i].idade_aluno));
    	fflush(stdin);

    	printf("Codigo Aluno:\n");
    	gets(ARR[i].codigo_aluno);
    	fflush(stdin);
    }

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas, surgiu-me uma duvida...

ao preencher este array de estruturas só o posso usar na função em que os estou a preencher...caso faça um puts na função main de um dos campos da estrutura já preenchida não da nada (como é óbvio).

A minha dúvida é: Como posso aceder na função main sempre que quiser ao array ja preenchido?

Será retornando o array na função func_alunos?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas não sei se te percebi bem a duvida mas eu faria assim!

Na função main

Inicializas o teu array de estruturas(struct alunos ARR[MAX_AL]:D, o total de alunos(totalalunos=0) porque nao tens ninguem na tua estrutura , e chamas a funcao por exemplo totalalunos=adiciona_aluno(ARR,totalalunos); ou seja envias o array de estruturas preenches a estrutura e o total de alunos, depois a funcao adiciona aluno vai ter return totalaluno+1; ou seja sabes que na tu estrutura tens pelo menos um aluno e assim sucessivamente.

Não sei se terei sido boa ajuda!

Cumprimentos

0

Partilhar esta mensagem


Link 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