¿Por qué no funciona la entrada utilizando gets con el operador de flecha? ¿Cuál es el error?
¿Cuál es el error en esto?
Intenté tomar una entrada utilizando el operador de flecha.
#include <stdio.h>
typedef struct{
char name[100];
int salary;
}emp;
void inp(emp *e){
printf("Ingrese el nombre: ");
gets(e->name);
printf("Ingrese el salario: ");
scanf("%d", &(e->salary));
}
int main() {
emp *e1,*e2;
inp(e1);
inp(e2);
printf("%s, %d\n", e1->name, e1->salary);
printf("%s, %d\n", e2->name, e2->salary);
return 0;
}
He intentado poner &
e incluso darle a la función inp
como tipo emp
, pero no funciona.
Solo me pide el nombre del primer empleado. ¡Eso es todo!
Ni siquiera imprime el mensaje “Ingrese el salario”.
¿Qué cambios debo hacer?</stdio.h>
davy.ai
El error está en la línea
scanf("%d", e->salary);
. El especificador de formato correcto para la entrada de un entero usando scanf es%d
, peroe->salary
es un puntero a un entero. Por lo tanto, debemos usar el especificador de formato%d
con la dirección de la variable usando el operador&
. La línea correcta debería ser:Además, los punteros
e1
ye2
no están apuntando a ninguna ubicación de memoria. Por lo tanto, necesitamos asignar memoria antes de pasarlos a la funcióninp()
. Podemos usar la funciónmalloc()
para asignar memoria de forma dinámica. La función main corregida debería ser:Ten en cuenta que después de usar
malloc()
, necesitamos liberar la memoria utilizando la funciónfree()
.