Problems to edit items within the struct

Asked

Viewed 39 times

0

I have the following struct:

typedef struct
{
    int id;
    char nome[50];
    int tipoUser;
    float vencimentos;
    int id_clinica;

} Utilizador;

I enter in the same values from the following functions :

void criarUser(Utilizador *utilizador, int n)
{

    printf("NOME: ");
    fgets(utilizador->nome, 50, stdin);
    utilizador->nome[strcspn(utilizador->nome, "\n")] = 0;

    printf("Vencimentos: ");
    scanf("%f", &utilizador->vencimentos);

    printf("tipo de user(1-Medico,2-Enfermeiro,3-Funcionario) ");
    scanf("%d", &utilizador->tipoUser);
    utilizador->id = n + 1;
    printf("id da clinica a que está associada ");
    scanf("%d", &utilizador->id_clinica);
}
boolean inserirUser(Utilizador *utilizadores, int *n, Utilizador utilizador)
{
    if (*n > TAMUtilizador)
    {
        return false;
    }

    utilizadores[*n] = utilizador;
    (*n)++;

    return true;
}

wanted now to edit the values inside the struct and would like to know why it is not working calls as functions:

 id_edicao=editarUser(utilizadores,&nUsers);
        criarComIdUser(utilizadores, id_edicao);

functions:

int editarUser(Utilizador *utilizadores, int *n)
{
    listarUsers(utilizadores, *n);
    int idAlterar;
    printf("Qual o id que quer alterar?");
    scanf("%d", &idAlterar);
    return idAlterar;
}
void criarComIdUser(Utilizador *utilizadores, int n)
{
  
    
   
    for (int i = 0; i <= n; i++)
    {
        if (i == n)
        {
            float vencimento;
            int tipoUser;
            int id_clinica;
            printf("%d",n);
            printf("Vencimentos: ");
            scanf("%f",&vencimento);

            printf("tipo de user(1-Medico,2-Enfermeiro,3-Funcionario) ");
            scanf("%d", &tipoUser);
             
            printf("id da clinica a que está associada ");
            scanf("%d",&id_clinica);
           
            utilizadores[n].id_clinica=id_clinica;
            utilizadores[n].tipoUser=tipoUser;
            utilizadores[n].vencimentos=vencimento;

            
        }

    }
}

does not return any error, simply does not edit the values, which can be?

1 answer

0


If I’ve observed correctly, it’s passing a pointer as a value, and it needs to pass the memoir position of the structure. See if this is not so, as follows an explanatory example below.

If you want to test the code use the: https://www.onlinegdb.com/online_c++_Compiler

Has the option of Debugger, even not replacing a local compilation, is a hand on the wheel, see if this solves.

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    int x;
    int y;
    float z;
} USER;

/* Recebe um ponteiro */
int insert_user( USER *ext_user )
  {
  if(ext_user == NULL)
    {
    free(ext_user);
    return -1;
    }

  printf("Insercao dos valores\n");
  ext_user->x = 4;
  ext_user->y = 6;
  ext_user->z = 8.5;
  return 0;
  }

int update_user( USER *ext_user )
  {
  if(ext_user == NULL)
    {
    free(ext_user);
    return -1;
    } 
    
  printf("Altera valores\n");
  ext_user->x *= 2;
  ext_user->y *= 4;
  ext_user->z *= 6;
  return 0;
  }

void
print_user( USER *ext_user )
  {
  if(ext_user == NULL)
    {
    free(ext_user); 
    return;
    } 
    
  printf
    (
    "Valor para X:: %d\n"
    "Valor para Y:: %d\n"
    "Valor para Z:: %f\n",
    ext_user->x,
    ext_user->y,
    ext_user->z
    );
  }

int 
main( void )
  {
  USER   stt_user = {0,0,0.0f}; // Valores presetados 
  USER*  ptr_user = (USER *) malloc(sizeof(USER)); // Stdlib - malloc :: Valores não presetados.
  
  /*  Repara no [ & ], passagem da posicao de memoria do elemento */
  printf("Struct Estatica \/\n");
  insert_user(&stt_user);
  print_user( &stt_user);
  update_user(&stt_user);
  print_user( &stt_user);
  
  /*  Esta mais na questao da forma como foi passado o parametro */
  printf("\n\nStruct Alocada Dinamicamente \/\n");
  insert_user(ptr_user); 
  print_user( ptr_user);
  update_user(ptr_user);
  print_user( ptr_user);
  return 0;
  }

  • Note, there is a small error in the scapes of / of the printf, but I believe that not affect the compilation will only give Warning.

  • was even porblema with passing the Id to position inves in array , thank you very much

  • Oops, how nice it worked out.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.