Ayuda con estructuras.. C bajo linux

#1
Que tal hermanos, recurro a ustedes pidiendo ayuda con un programa donde utilizo vectores de estructuras.

El problema es, tengo muy buen maestro de programación, sin embargo cuando explico el uso de vectores de estructuras no entendi muy bien el uso del operador flecha, que a lo que entendi este se usa cuando mandamos por referencia la estructura( estoy usando funciones en mis programas), tmb tengo entendido que cuando mandamos un vector o una matriz, estas son enviadas como referencia sin necesidad de usar punteros, sin embargo no logro que mi programa funcione :S
Les dejo aqui el codigo, no busco que resuelban mi tarea jeje, solo si me pueden explicar un poco el funcionamiento del operador flecha, cuando leemos una cadena, un dato numerico, la igualacion de una variable "x" a un miembro etc,, Se los agradesco mucho!



El programa trata de un lote de autos, que registrara un maximo de 100 vehiculos, usar vectores de estructuras para almacenar la informacion de cada vehiculo registrado(dado de alta), pedir los datos siguientes: (los miembros de la estructura), el programa devera asignar la serie de motor, para lo cual utilice random, esto es solo el inciso a, el registrar vehiculos, pero si no se manejar el operador flecha creo q no podre realizar nada XD...
espero puedan ayudarme a entender un poco mejor el uso del envio de vectores de estructuras, y mas que nada del manejo dentro de una funcion..
Nuevamente Gracias!


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

struct lote
{
int No_id;
char Marca[40];
char Modelo[40];
int Anyo;
char Color[15];
int No_cil;
float Rendim;
float Precio;
long int No_serie;
char Fecha[20];
};


void altas(struct lote dat[100],int *);
//void bajas(struct lote dat[100],int );
//void modificaciones(struct lote dat[100]);
//void consultas(struct lote [100],int );


int main ()
{//inicio main

struct lote dat[100];
char opc;
int x=0;//este es mi contador, que al registrar un vehiculo incrementa 1 :D
initscr();
do
{
clear();//inicio do while
printw(">>MENU<<\n");
printw("[1]-Altas.\n");
printw("[2]-Bajas.\n");
printw("[3]-Modificaciones.\n");
printw("[4]-Consultas.\n");
printw("[5]-Salir\n");
printw("Opcion[ ]\b\b ");
opc=toupper(getch());
switch(opc)
{
case 'A':
case '1': altas(dat,&x);
break;

case 'B':
case '2': bajas(dat,x);
break;

/*case 'C':
case '3': modificaciones(dat);
break;

case 'D':
case '4': consultas(dat);
break;
*/

}//fin menu

}while(opc!='5'&&opc!='E');//fin do while


getch();
refresh();
endwin();
return 0;

}//fin main



void altas(struct lote dat[100],int *x)
{
int i=0,bid,y,idaux;//bid=bandera de id
char opc;

do
{
clear();
printw(">>ALTAS<<\n");
printw("No. De Identificacion:");
scanw("%d",&idaux);
bid=0;

for(i=0;i<x&&bid!=1;i++)
{
if(idaux==dat.No_id)
{
clear();
printw("El No. ID ya le pertenece a un auto, Ingresar No. ID Diferente");
bid=1;
getch();
}
}

if(bid==0)
{
(dat[x]&->No_id)=idaux;// aqui comienzan los problemas, en almacenar un valor en los miembros,, sin importar cual sea, si numerico,cadena etc.
printw("Marca:");
getstr(dat[x]->Marca);

printw("Modelo:");
getstr(dat[x]->Modelo);

printw("Año:");
scanw("%d"&dat[x]->Anyo);

printw("Color: ");
getstr(dat[x]->Color);

printw("No. Cilindros: ");
scanw("%d",&dat[x]->No_cil);

printw("Rendimiendo de kilometro por litro de gasolina: ");
scanw("%f",&dat[x]->Rendim);

printw("Precio: ");
scanw("%f",&dat[x]->Precio);

&dat[x]->No_serie=rand()%1000000;
printw("No. serie:%ld\n",dat[x].No_serie);
printw("Fecha: ");
getstr(dat[x]->Fecha);
//x++;
(*x)++;
}

printw("Desea registrar otro vehiculo:\n[1].Si \n[2].No \nOpcion:[ ]\b\b");
opc=toupper(getch());
}while(opc!='2'&&x<100&&opc!='C');


}






}


Esta es la lista de errores que arroja el compilador
pr7.c: In function ‘main’:
pr7.c:48: warning: passing argument 1 of ‘altas’ from incompatible pointer type
pr7.c:20: note: expected ‘struct lote **’ but argument is of type ‘struct lote (*)[100]’
pr7.c: In function ‘altas’:
pr7.c:91: warning: comparison between pointer and integer
pr7.c:93: error: request for member ‘No_id’ in something not a structure or union
pr7.c:104: error: array subscript is not an integer //estos errores los arroja cuando inicio la lectura de la informacion, asi com ola asignacion a uno de sus miembros etc.
pr7.c:104: error: expected expression before ‘->’ token
pr7.c:106: error: array subscript is not an integer
pr7.c:109: error: array subscript is not an integer
pr7.c:112: error: array subscript is not an integer
pr7.c:115: error: array subscript is not an integer
pr7.c:118: error: array subscript is not an integer
pr7.c:121: error: array subscript is not an integer
pr7.c:124: error: array subscript is not an integer
pr7.c:126: error: array subscript is not an integer
pr7.c:127: error: array subscript is not an integer
pr7.c:129: error: array subscript is not an integer
pr7.c:136: warning: comparison between pointer and integer

Gracias :D
 
#2
Ya leí varios libros, pero ninguno hace referencia al operador flecha,, además de que no contienen mucha información del uso de estructuras :S
 

animatrix92

Bovino adolescente
#3
el operador flecha según tengo entendido es para acceder a los miembros de una estructura

lote->No_id;

emm no se mucho sobre eso, asi que no se si sea del todo correcto
 
#4
el operador flecha según tengo entendido es para acceder a los miembros de una estructura

lote->No_id;

emm no se mucho sobre eso, asi que no se si sea del todo correcto

de echo si, un ejemplo seria,
(ya dentro de la funcion donde capturo la info)
printf("Dame el nombre:");
getstr(variable_struc->nombre);
printf("Edad:");
scanf("%d",&variable_struct->edad);

pero no funciona, no se si mi error este en el envio del vector tipo estructura, o no c jejej,, ya termine todo el programa, el unico error son esas lecturas y envios de la variable estrcut :S

Gracias por tu ayuda!
 
#6
Muchas gracias por los links, aclare varias de mis dudas..
GRACIAS!

Que tal bakunos,, ya resolvi el proble,a al final termine usando el operador ".", el programa funciono igual en una funcion "x" que en el main, lo raro es que contradice todo lo que mi maestro explico :D... quien sabe,, aun asi,, Muchas Gracias!
 
Arriba