Jump to content

[Resolvido] Editar struct


AJBM

Recommended Posts

Boas!

Eu queria saber como é que eu posso editar um dado elemento da estrutura, isto é, por exemplo eu tenho uma estrutura pedro={3,"pedro"}; e eu quero saber como é que altero so o numero,sem enviar tudo.

Eu consigo alterar o numero mas tenho de enviar tudo, isto é, nome, e o num alterado, nao nenhuma maneira de passar so o numero?

void editar(int posicao,Aluno *aluno){
 posicao--;
 alunos[posicao]=*aluno;
}
int main(){
 Aluno antonio={1,"antonio"};
 Aluno joao={2,"joao"};
 Aluno pedro={3,"pedro"};
 Aluno maria={4,"maria"};
 Aluno pedro2={4,"pedro"};
 add(antonio);
 add(joao);
 add(pedro);
 add(maria);
 puts("Listar:");
 listar();
 puts("Listar:");
 editar(3,&pedro2);
 listar();
Link to comment
Share on other sites

(vou ignorar o mau português assim como a má explicação do problema)

se o que pretendes é alterar o valor de uma estrutura, o normal é usar um ponteiro para essa estrutura

void alterar_num_aluno(Aluno * aluno, int val)
{
 if (aluno->num < 10)
   aluno->num = val;
}

// se tens uma lista de alunos
Aluno alunos[10];

// chamar a função para o 3º elemento da lista
alterar_num_aluno(&alunos[2], 30);
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

era bom começares a pensar nisso por ti ...

pensa no que necessitas :

- onde irás guardar a informação (a estrutura)

- a informação que iras guardar (nome e número)

void alterar(Aluno * aluno, const char * nome, int numero)
{
 // fazes o que tens de fazer
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

ok. obrigado 👍 .

Eu para adicionar Aluno a um array, preciso de um contador e de um array do tipo Aluno, o meu professor não quer que eu use uma variável global para o contador, eu criei um contador dentro de uma função que é o menu_aluno e passo como parâmetro para a função adicionar, e funciona mas se eu voltar para o menu_principal a variável fica a zeros outra vez.Existe alguma maneira de resolver?

void menu_Aluno() {
// add remove eddit
unsigned int op;
unsigned int countAluno=0;

do {
 printf("............................\n");
 printf("1-Adicionar aluno\n");

 scanf("%u",&op);

 switch (op) {
	 case 1:
		 addAluno(&countAluno);

		 break;
		 }


} while (op != 6);
}
Link to comment
Share on other sites

como eu disse não dei, mas tive a pesquisar um bocado sobre o assunto.E penso que esteja a usar correctamente. Mas antes de usar apontadores tinha feito o que me disseste fiz uma função que incrementa-se o valor do countAluno e chamava -a no função adicionar e retornava o valor mas quando voltava ao menu principal voltava a ficar a 0

Link to comment
Share on other sites

Esta e a função adicionar

int addAluno(unsigned int *countAluno) {
int add=FALSE;


clear_input();//limpa o buffer
printf("Introduza o nome : ");
gets(alunos[*countAluno].dadosPessoais.nome);
printf("Introduza o BI: ");
scanf("%lu", &alunos[*countAluno].bi);
add=TRUE;
*countAluno = *countAluno + 1;
return add;
}

menu do aluno

unsigned int op;
unsigned int countAluno=0;

do {
 printf("............................\n");
 printf("1-Adicionar aluno\n");
printf("6-sair\n");
 printf("............................\n");
 scanf("%u",&op);

 switch (op) {
	 case 1:
		 addAluno(&countAluno);

		 break;
} while (op != 6);
}
Edited by AJBM
Link to comment
Share on other sites

Esta e a função adicionar

int addAluno(unsigned int *countAluno) {
int add=FALSE;


clear_input();//limpa o buffer
printf("Introduza o nome : ");
gets(alunos[*countAluno].dadosPessoais.nome);
printf("Introduza o BI: ");
scanf("%lu", &alunos[*countAluno].bi);
add=TRUE;
*countAluno = *countAluno + 1;
return add;
}

menu do aluno

unsigned int op;
unsigned int countAluno=0;

do {
 printf("............................\n");
 printf("1-Adicionar aluno\n");
printf("6-sair\n");
 printf("............................\n");
 scanf("%u",&op);

 switch (op) {
	 case 1:
		 addAluno(&countAluno);

		 break;
} while (op != 6);
}

estou a altera o valor do countAluno, *countAluno=*countAluno+1;

Edited by AJBM
Link to comment
Share on other sites

listar alunos

void listarAlunos(unsigned int *countAluno) {

unsigned int i;
for (i = 0; i < (*countAluno); i++) {


	printf("Bi: %lu\n",alunos[i].bi);
	printf("Nome: %s\n", alunos[i].dadosPessoais.nome);
}}

adicionar alunos

int addAluno(unsigned int *countAluno) {
int add=FALSE;


clear_input();
printf("Introduza o nome : ");
gets(alunos[*countAluno].dadosPessoais.nome);
printf("Introduza o BI");
scanf("%lu", &alunos[*countAluno].bi);
*countAluno = *countAluno + 1;
add=TRUE;

return add;
}

menu alunos

void menu_Aluno() {
// add remove eddit
unsigned int op;
unsigned int countAluno=0;

do {
	printf("............................\n");
	printf("1-Adicionar aluno\n");
	printf("2-Remover aluno\n");
	printf("3-Editar aluno\n");
	printf("4-Listar alunos\n");
	printf("5-Consultar agenda de aluno\n");
	printf("6-Sair\n");
	printf("............................\n");
	scanf("%u",&op);

	switch (op) {
		case 1:
			addAluno(&countAluno);

			break;
		case 2:
			printf("rmAluno");
			break;
		case 3:
			printf("editAluno");
			break;
		case 4:

			listarAlunos(&countAluno);
			break;
		case 5:
			printf("Consultar agenda de aluno");
			break;

	}


} while (op != 6);
}

menu principal,

int main(int argc, char** argv) {
unsigned int op;


do {
	printf("........ .......\n");
	printf("1-Aluno\n");
	printf("2-Instrutor\n");
	printf("3-Sair\n");
	printf("..............................\n");
	scanf("%u",&op);

	switch (op) {
		case 1: menu_Aluno();
			break;
		case 2: menu_Instrutor();
			break;


	}



} while (op != 3);

return (EXIT_SUCCESS);

}
Link to comment
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
×
×
  • 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.