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
			
			
			
				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
			
			
			
				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   ;)
			
			
			
				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){
     printf("Nombre: ");
      scanf("%s", d->nom);
     printf("Asiento: ");
      scanf("%d", d->asiento);
    }
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.
			
			
			
				Cita de: BatchianoISpyxolo en  7 Noviembre 2012, 22:08 PMDeclaras 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)
{
   printf("Nombre: ");
   scanf("%s", e->nom);
   
   printf("Asiento: ");
   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 
         puts("Asiento ocupado");
   }while (i < 3);
}
void imprimir(struct empleado *e){
     printf("Nombre\tAsiento");
     printf(" %s \t %d", e->nom, e->asiento);
}Debería funcionar pero no lo revise, eso te toca a ti.
Un saludo