Jump to content
Carlos7

[Resolvido] Dado editado mantém-se igual

Recommended Posts

Carlos7

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");
   }
}

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Carlos7

Não percebi o que quiseste dizer, estás perguntar se a impressão do valor (depois de alterado) é feita fora desta função?

Share this post


Link to post
Share on other sites
HappyHippyHippo

#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

Share this post


Link to post
Share on other sites
Carlos7

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 by Carlos7

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Carlos7

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 by Carlos7

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Carlos7

Ainda não :s

Mas pelo que tenho lido essa sim, seria a melhor forma de fazer estes trabalhos.

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

×
×
  • 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.