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
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
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
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