Carlos7 Posted December 7, 2012 at 06:48 PM Report #486199 Posted December 7, 2012 at 06:48 PM Boas pessoal, é o seguinte, estou aqui com um pequeno problema ao editar o dado de uma estrutura. O código corre, não tem erros, mas no entanto o valor no fim mantém-se inalterado quando listo os dados. O código que tenho para editar é o seguinte: void editClient(CounterClientsStruct counterClient) { int numberToEdit; unsigned int i; int newNumber; printf("What client do you want to edit? Enter the number of client:\n"); scanf("%d", &numberToEdit); while(counterClient.client[i].numberClient != numberToEdit && i < counterClient.counterClient){ i++; } if (counterClient.client[i].numberClient == numberToEdit){ printf("Vou mudar o numero!\n"); counterClient.client[i].numberClient = 2; printf("mudei\n"); }else{ printf("Client not found!\n"); } }
HappyHippyHippo Posted December 7, 2012 at 06:54 PM Report #486202 Posted December 7, 2012 at 06:54 PM vou adivinhar : por acaso a verificação do valor que dizes que não foi alterado é feita fora da função apresentada, certo ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos7 Posted December 7, 2012 at 06:57 PM Author Report #486203 Posted December 7, 2012 at 06:57 PM Não percebi o que quiseste dizer, estás perguntar se a impressão do valor (depois de alterado) é feita fora desta função?
HappyHippyHippo Posted December 7, 2012 at 07:03 PM Report #486205 Posted December 7, 2012 at 07:03 PM #include <stdio.h> void f(int b) { b = 111; } int main() { int a = 222; f(a); printf("valor : %d\n", a); return 0; } que valor será apresentado na consola ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos7 Posted December 7, 2012 at 07:06 PM Author Report #486206 Posted December 7, 2012 at 07:06 PM (edited) 111 penso eu EDIT: Ou melhor, 222 porque não estás a retornar o valor da função. Ou então já me estou a trocar todo... Edited December 7, 2012 at 07:06 PM by Carlos7
HappyHippyHippo Posted December 7, 2012 at 07:08 PM Report #486209 Posted December 7, 2012 at 07:08 PM mas eu não alterei o valor de 'a'. a única coisa que fiz foi dar o valor de 'a' à variável (argumento) 'b' da função. 'a' != 'b' apesar de 'b' ter o valor de 222 (que depois será alterado) 'a' nunca é alterado isto tem um nome que é passagem por valor, que é o modelo de chamada de função usado pelo C. não é a variável que é fornecido à função, mas sim o valor da variável 'a'. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos7 Posted December 7, 2012 at 07:11 PM Author Report #486210 Posted December 7, 2012 at 07:11 PM Então não é possível fazer como estou a tentar?
HappyHippyHippo Posted December 7, 2012 at 07:13 PM Report #486211 Posted December 7, 2012 at 07:13 PM claro que é. até existe várias maneiras de o fazer, se bem que a melhor (de certesa ainda não sabes) uma solução simples será : #include <stdio.h> int f(int b) { b = 111; return b; // retornar o valor alterado } int main() { int a = 222; a = f(a); // guardar o valor alterado printf("valor : %d\n", a); return 0; } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos7 Posted December 7, 2012 at 07:15 PM Author Report #486212 Posted December 7, 2012 at 07:15 PM (edited) Como estou a trabalhar com estruturas que têm mais que um valor guardado (numero, nome, etc, etc) então tenho de retornar a estrutura de cada vez que altero correcto? do tipo: CounterClientsStruct editClient(CounterClientsStruct counterClient) { int numberToEdit; unsigned int i; int newNumber; printf("What client do you want to edit? Enter the number of client:\n"); scanf("%d", &numberToEdit); while (counterClient.client[i].numberClient != numberToEdit && i < counterClient.counterClient) { i++; } if (counterClient.client[i].numberClient == numberToEdit) { printf("New number:\n"); scanf("%d", &counterClient.client[i].numberClient); } else { printf("Client not found!\n"); } return counterClient; } E quando chamo a função editar tenho isto: counterClient = editClient(counterClient); Está a funcionar, mas estará correcto o que estou a fazer? Edited December 7, 2012 at 07:17 PM by Carlos7
HappyHippyHippo Posted December 7, 2012 at 07:38 PM Report #486215 Posted December 7, 2012 at 07:38 PM quantas estradas existem do Porto a Lisboa ? uma solução é correcta se o resultado é o pretendido, sem existir efeitos secundários indesejados. se é a melhor, não. mas é a solução que deverás saber e perceber. sabes trabalhar com ponteiros ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos7 Posted December 7, 2012 at 07:45 PM Author Report #486216 Posted December 7, 2012 at 07:45 PM Ainda não :s Mas pelo que tenho lido essa sim, seria a melhor forma de fazer estes trabalhos.
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