Autor
|
Tema: Problema con estructuras[Ayuda] (Leído 2,443 veces)
|
Blaster
Desconectado
Mensajes: 190
|
Alguien podria decirme en que estoy fallando, aka el codigo que estoy haciendo: #include <stdio.h> struct empleado{ char nom[40]; int asiento[3]; }; void ingresar(empleado d); void asignarAsiento(empleado q[]); void imprimir(empleado a); int main() { empleado e[3]; asignarAsiento(e); for (int i=0; i!=3; ++i) imprimir(e[i]); return 0; } void ingresar(struct empleado d){ printf("Nombre: "); scanf("%s", d.nom); printf("Asiento: "); scanf("%d", &d.asiento); } void asignarAsiento(struct empleado q[]){ int i, j; for(i=0; i<3; i++){ ingresar(q[i]); for(j=0; j<i; j++) { if(q[i].asiento[j]==q[j].asiento[i]){ printf ("Asiento ocupado\n"); i--; break; } } } } void imprimir(struct empleado a){ printf("Nombre\tAsiento"); printf(" %s \t %d", a.nom, a.asiento); }
A la hora de compilarlo el compilador me lanza dos errores: error: cannot convert `empleado' to `empleado*' for argument `1' to `void asignarAsiento(empleado*)' error: conversion from `empleado*' to non-scalar type `empleado' requested
|
|
« Última modificación: 7 Noviembre 2012, 22:00 pm por neo-System »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
El error se genera debido a que la función "asignarAsiento" espera que su argumento sea la dirección en memoria de un objeto de tipo "empleado". Si eso te suena muy técnico y complicado no lo es: ello se realiza cada vez que llamas a una función y el argumento se indica mediante el nombre de un array. En buen cristiano: para utilizar esa función debes declarar un array y pasarlo a la función, como no lo haces se genera el error que mencionas. Para solucionarlo debes, entre otras cosas, declarar el array (y tampoco llamar directamente a la función "ingresar"), mas o menos así: int main() { empleado e[10]; asignarAsiento(e); for (int i = 0; i != 10; ++i) imprimir(e[i]); return 0; }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
Blaster
Desconectado
Mensajes: 190
|
Modifique el codigo como me lo habias dicho, pero no obtengo la salida deseada ya que quiero que me imprima, el nombre y el asiento que ocupa el empleado. Y ademas no me detecta si el asiento esta o no ocupado, estoy todo liado con esto de las estructuras. Desde ya muchas gracias
|
|
« Última modificación: 7 Noviembre 2012, 20:26 pm por neo-System »
|
En línea
|
|
|
|
BatchianoISpyxolo
Desconectado
Mensajes: 166
|
Declaras empleados e[3], sin haber hecho un typedef de la struct y luego usas la struct... etc etc. Se consecuente con tus declaraciones y con los parámetros que tus funciones reciben y los argumentos que pasas al llamarlas. Además ten cuidado con cosas como esta: void ingresar(empleado d);
Debes pasar la referencia de d para poder modificarla. #include <stdio.h> typedef struct { char nom[40]; int asiento[3]; } empleado; void ingresar(empleado * d); void asignarAsiento(empleado q[]); void imprimir(empleado a); int main() { int i; empleado e[3]; asignarAsiento(e); for (i=0; i<3; ++i) imprimir(e[i]); return 0; } void ingresar(empleado * d){ } void asignarAsiento(empleado e[]){ int i, j; for(i=0; i<3; i++){ ingresar(&e[i]); for(j=0; j<i; j++) { if( *e[i].asiento == *e[j].asiento ){ printf ("Asiento ocupado. Vuelva a intentarlo.\n"); i--; break; } } } } void imprimir(empleado a){ printf("Nombre: %s\tAsiento: %d\n", a. nom, *a. asiento); }
Puede que te funcione.
|
|
« Última modificación: 7 Noviembre 2012, 22:10 pm por BatchianoISpyxolo »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Declaras empleados e[3], sin haber hecho un typedef de la struct y luego usas la struct... Es valido siempre y cuando el lenguaje, a pesar de todas las apariencias, no sea C sino C++ (a veces pasa). Y si un empleado solo puede tener un asiento asignado hay que cambiar la definicion de la estructura a: struct empleado{ char nom[40]; int asiento; };
Con los cambios: #include <stdio.h> struct empleado{ char nom[40]; int asiento; }; void ingresar(struct empleado *e); void asignarAsiento(struct empleado *e); void imprimir(struct empleado *e); int main(void) { struct empleado e[3]; asignarAsiento(e); for (int i = 0; i != 3; ++i) imprimir(e + i); return 0; } void ingresar(struct empleado *e) { scanf("%d", &e ->asiento ); } void asignarAsiento(struct empleado *e) { int i; int j; i = 0; do { ingresar(e + i); for (j = 0; j < i && e[j].asiento != e[i].asiento; j++) ; if (i == j) i++; else }while (i < 3); } void imprimir(struct empleado *e){ printf(" %s \t %d", e ->nom , e ->asiento ); }
Debería funcionar pero no lo revise, eso te toca a ti. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con estructuras y apuntadores
Programación C/C++
|
angelihsahn
|
2
|
2,309
|
31 Agosto 2013, 12:27 pm
por lanun
|
|
|
Problema con estructuras
Programación Visual Basic
|
puribamber
|
6
|
2,832
|
19 Agosto 2014, 15:51 pm
por engel lex
|
|
|
Ayuda con estructuras de C
Programación C/C++
|
yonkikong
|
1
|
1,647
|
25 Mayo 2015, 01:20 am
por Seyro97
|
|
|
Problema con estructuras..
Programación C/C++
|
Black cracker
|
3
|
1,780
|
16 Agosto 2015, 01:43 am
por ivancea96
|
|
|
AYUDA! problema con programas usando Estructuras de control selectivas
Programación C/C++
|
Ingrid1997
|
2
|
2,391
|
11 Octubre 2015, 11:07 am
por Seyro97
|
|