AJBM Posted December 4, 2012 at 03:02 PM Report #485683 Posted December 4, 2012 at 03:02 PM 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();
HappyHippyHippo Posted December 4, 2012 at 03:09 PM Report #485684 Posted December 4, 2012 at 03:09 PM (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 Portugol Plus
_7_up_ Posted December 4, 2012 at 03:23 PM Report #485686 Posted December 4, 2012 at 03:23 PM mudarPara18(int *valor){ *valor = 18; } main(){ int a=10; printf("%d",a); mudarPara18(&a); printf("%d",a); Output: >10 >18 "Sem enviar tudo" deves querer dizer que não queres passar como argumento a estrutura toda... Mas isto é mesmo eu a adivinhar.. mudarPara18(&aluno->valor);
AJBM Posted December 4, 2012 at 03:24 PM Author Report #485688 Posted December 4, 2012 at 03:24 PM Ja agora não é possivel fazer uma função generica, ou seja, que tanto de para alterar o nome e numero?
HappyHippyHippo Posted December 4, 2012 at 03:26 PM Report #485689 Posted December 4, 2012 at 03:26 PM 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 Portugol Plus
AJBM Posted December 7, 2012 at 10:08 AM Author Report #486123 Posted December 7, 2012 at 10:08 AM 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); }
HappyHippyHippo Posted December 7, 2012 at 10:16 AM Report #486125 Posted December 7, 2012 at 10:16 AM existe duas : - ou criar uma estrutura com o array e os valores associados a este - ou andas sempre com as variáveis todas atráz IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted December 7, 2012 at 10:25 AM Author Report #486126 Posted December 7, 2012 at 10:25 AM Por exemplo ou faço typedef struct{ Aluno alunos[10]; int countAlunos} conjAlunos; Ou passo sempre a variável countAluno pelas funções todas, como estava a fazer em cima, mas o meu problema é que quando volto ao menu principal, a variável fica sempre com o valor 0
HappyHippyHippo Posted December 7, 2012 at 10:29 AM Report #486129 Posted December 7, 2012 at 10:29 AM e que tal declarares a variável no local em que faça sentido, como ao mesmo tempo que declaras o array ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted December 7, 2012 at 10:36 AM Author Report #486133 Posted December 7, 2012 at 10:36 AM Eu declarei o array, como sendo uma variável global como ainda não dei apontadores o meu professor disse que podia declarar o array como sendo variável global, tive a pesquisar um bocado sobre apontadores mas ainda não percebo muito.
HappyHippyHippo Posted December 7, 2012 at 10:40 AM Report #486134 Posted December 7, 2012 at 10:40 AM ainda não deste apontadores/ponteiros ? addAluno(&countAluno); então porque os usas no teu código ? se o problema é usar ponteiros, terás que fornecer o valor da variável à função e retornar o novo valor IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted December 7, 2012 at 10:51 AM Author Report #486140 Posted December 7, 2012 at 10:51 AM 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
HappyHippyHippo Posted December 7, 2012 at 11:08 AM Report #486141 Posted December 7, 2012 at 11:08 AM apresenta o código que tens, porque pelos vistos, não basta dizer como se faz IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted December 7, 2012 at 09:43 PM Author Report #486228 Posted December 7, 2012 at 09:43 PM (edited) 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 December 7, 2012 at 10:46 PM by AJBM
HappyHippyHippo Posted December 7, 2012 at 10:42 PM Report #486233 Posted December 7, 2012 at 10:42 PM ainda estás a actualizar o valor de countAluno ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted December 7, 2012 at 10:47 PM Author Report #486234 Posted December 7, 2012 at 10:47 PM (edited) 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 December 7, 2012 at 10:51 PM by AJBM
HappyHippyHippo Posted December 7, 2012 at 10:57 PM Report #486235 Posted December 7, 2012 at 10:57 PM e onde estás a verificar que o valor de countAluno não está a ser actualizado ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted December 7, 2012 at 11:02 PM Author Report #486238 Posted December 7, 2012 at 11:02 PM eu adiciona o elementos e funciona, depois quando volto ao menu principal, e volto para o menu aluno e peco para listar os alunos não aparece nada. (eu não disponibilizei esta funcionalidade porque penso que o problema esta no menu_aluno por causa do countAluno=0)
HappyHippyHippo Posted December 7, 2012 at 11:07 PM Report #486240 Posted December 7, 2012 at 11:07 PM apresenta TODO o código e tenta escrever português que se consiga ler ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted December 7, 2012 at 11:15 PM Author Report #486244 Posted December 7, 2012 at 11:15 PM 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); }
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now