Domingo 15 de Diciembre de 2024, 09:40
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Retornar un puntero a una estructura
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Retornar un puntero a una estructura (Leído 4619 veces)
kingsizen
Miembro activo
Mensajes: 41
Retornar un puntero a una estructura
«
en:
Lunes 27 de Abril de 2009, 22:45 »
0
que tal amigos, tengo una nueva pregunta para hacerles. encontre un examen final en el cual se plantea un ejercicio que dice
"... la funcion buscar, busca el producto que coincide con el codigo ingresado y retorna (no muestra) todos los datos de ese producto.
a) recibe los datos de todos los articulos, la cantidad total de articulos y el codigo buscado.
b) retorna en un puntero a la estructura que contiene los datos de ese articulo si es que el codigo existe, en caso contrario retorna un puntero a una estructura con codigo ***** "
aqui va el codigo de lo que estuve haciendo, fijense en la funcion buscar, no tengo idea como se retorna un puntero.. pero intente algo.
desde ya espero su ayuda. muchisimas gracias!!
Código: C
# include <stdio.h>
# include <string.h>
# define sub 50
struct
productos
{
char
codigo
[
5
]
;
char
modelo
[
10
]
;
char
descripcion
[
200
]
;
float
precio
;
char
codprov
[
10
]
;
char
nomprov
[
30
]
;
}
;
void
carga
(
struct
productos
[
]
,
int
*
)
;
int
buscar
(
struct
productos
[
]
,
int
,
char
[
]
)
;
main
(
)
{
struct
productos prod
[
sub
]
;
int
*
puntero
,
c
,
cant_prod
,
codigo_orden
;
char
modelo_buscado
[
10
]
,
codigo_buscado
[
5
]
;
cant_prod
=
0
;
carga
(
prod
,&
cant_prod
)
;
printf
(
"%d"
,
cant_prod
)
;
do
{
printf
(
"------------------------------< Elija Una Opcion >n"
)
;
printf
(
"1) Ordenarn"
)
;
printf
(
"2) Mostrarn"
)
;
printf
(
"3) Buscarn"
)
;
printf
(
"4) Modificarn"
)
;
printf
(
"5) Salirn"
)
;
scanf
(
"%d"
,&
c
)
;
switch
(
c
)
{
case
1
:
{
printf
(
"Ingrese 1 para ordenar por codigo, 2 para ordenar por modelon"
)
;
scanf
(
"%d"
,&
codigo_orden
)
;
ordenar
(
prod
,
cant_prod
,
codigo_orden
)
;
}
break
;
case
2
:
{
printf
(
"Ingrese Modelo Buscadon"
)
;
scanf
(
"%s"
,
modelo_buscado
)
;
mostrar
(
prod
,
cant_prod
,
modelo_buscado
)
;
}
break
;
case
3
:
{
printf
(
"Ingrese codigo buscadon"
)
;
scanf
(
"%s"
,
codigo_buscado
)
;
*
puntero
=
buscar
(
prod
,
cant_prod
,
codigo_buscado
)
;
}
}
while
c
!=
5
;
}
int
buscar
(
struct
productos p
[
]
,
int
cant
,
cod
[
]
)
{
int
i
,*
punt
;
for
(
i
=
0
;
i
<
cant
,++
i
)
{
if
(
strcmp
(
cod
,
p
[
i
]
.
codigo
)
==
0
)
*
punt
=
p
[
i
]
;
}
return
*
punt
;
}
void
carga
(
struct
productos p
[
]
,
int
*
cant
)
{
int
i
=*
cant
;
char
r
;
do
{
printf
(
"Ingrese Codigon"
)
;
scanf
(
"%s"
,&
p
[
i
]
.
codigo
)
;
/*fflush (stdin);
printf ("Ingrese Modelon");
gets(p[i].modelo);
printf ("Ingrese Descripcionn");
gets(p[i].descripcion);
printf ("Ingrese Precion");
scanf ("%f",&p[i].precio);
printf ("Ingrese Cod proveedorn");
scanf("%s",p[i].codprov);
fflush (stdin);
printf ("Ingrese Nombre proveedorn");
gets(p[i].nomprov);*/
i
++;
printf
(
"Seguir ingresando datos?n"
)
;
fflush
(
stdin
)
;
scanf
(
"%c"
,&
r
)
;
}
while
(
r
!=
'n'
)
;
*
cant
=
i
;
}
Tweet
betopin
Miembro activo
Mensajes: 93
Nacionalidad:
Re: Retornar un puntero a una estructura
«
Respuesta #1 en:
Martes 28 de Abril de 2009, 06:20 »
0
Evidentemente ese ejemplo esta mal porque, en caso de funcionar, solo estas retornando uno solo de los campos de la estructura y no todos los que necesitas de un solo articulo. La funcion deberas de definirla de otra forma y tendras que utilizar probablemente el operador flecha
Te dejo un ejemplo para que te guies
Código: C
#include <stdio.h>
#include <stdlib.h>
struct
agenda
{
char
apellido
[
30
]
;
char
nombre
[
30
]
;
char
telefono
[
30
]
;
int
edad
;
}
datos
[
3
]
,*
dat
;
struct
agenda
*
suma
(
struct
agenda
*
total
)
{
int
pos
;
for
(
pos
=
0
;
pos
<
3
;
pos
++
)
if
(
(
(
total
+
pos
)
->
edad
)
>
10
)
return
(
total
+
pos
)
;
}
int
main
(
)
{
int
a
,
val
=
0
;
for
(
a
=
0
;
a
<
3
;
a
++
)
{
printf
(
"Ingrese el apellido del sujeto #%i: "
,
a
+
1
)
;
scanf
(
"%s"
,
datos
[
a
]
.
apellido
)
;
printf
(
"Ingrese el nombre del sujeto #%i: "
,
a
+
1
)
;
scanf
(
"%s"
,
datos
[
a
]
.
nombre
)
;
printf
(
"Ingrese el telefono del sujeto #%i: "
,
a
+
1
)
;
scanf
(
"%s"
,
datos
[
a
]
.
telefono
)
;
printf
(
"Ingrese la edad del sujeto #%i: "
,
a
+
1
)
;
scanf
(
"%i"
,&
datos
[
a
]
.
edad
)
;
printf
(
"n"
)
;
}
for
(
a
=
0
;
a
<
3
;
a
++
)
{
printf
(
"Nombre: %s %s, Telefono: %s, Edad: %in"
,
datos
[
a
]
.
apellido
,
datos
[
a
]
.
nombre
,
datos
[
a
]
.
telefono
,
datos
[
a
]
.
edad
)
;
if
(
datos
[
a
]
.
edad
>
10
)
val
=
1
;
}
if
(
val
==
1
)
{
dat
=
suma
(
datos
)
;
printf
(
"Nombre: %s %s, Telefono: %s, Edad: %inn"
,
dat
->
apellido
,
dat
->
nombre
,
dat
->
telefono
,
dat
->
edad
)
;
}
system
(
"pause"
)
;
return
0
;
}
En el, capturo los datos de 3 personas e imprimo la primer persona que encuentra con edad mayor a 10 años. Mira que devuelvo todo a traves de un puntero a la estructura
Saludos
Programas en C]
kingsizen
Miembro activo
Mensajes: 41
Re: Retornar un puntero a una estructura
«
Respuesta #2 en:
Martes 28 de Abril de 2009, 18:53 »
0
saludos, aca me guie en el ejemplo que me diste y modifique el codigo segun lo que entendi.
en primer lugar la funcion ahora devuelve un tipo de datos "struct productos" y no un "int" como hacia antes. declare en main un *puntero tambien con el tipo de dato struct productos, que va a recibir el puntero proveniente de la funcion.
ahora no me queda del todo claro, porque en este prototipo
struct productos
*buscar
(struct productos
*p
,int cant,char cod[])
se usa
*buscar
en vez de
buscar
y porque se usa
*p
en vez de
p[]
espero tu respuesta. muchas gracias!!
aqui va el codigo:
Código: C
# include <stdio.h>
# include <string.h>
# define sub 50
struct
productos
{
char
codigo
[
5
]
;
char
modelo
[
10
]
;
char
descripcion
[
200
]
;
float
precio
;
char
codprov
[
10
]
;
char
nomprov
[
30
]
;
}
;
void
carga
(
struct
productos
[
]
,
int
*
)
;
//void ordenar (struct productos [],int,int);
struct
productos
*
buscar
(
struct
productos
*,
int
,
char
[
]
)
;
main
(
)
{
struct
productos prod
[
sub
]
,*
puntero
;
int
c
,
cant_prod
,
codigo_orden
;
char
modelo_buscado
[
10
]
,
codigo_buscado
[
5
]
;
cant_prod
=
0
;
carga
(
prod
,&
cant_prod
)
;
printf
(
"%d"
,
cant_prod
)
;
do
{
printf
(
"------------------------------< Elija Una Opcion >n"
)
;
printf
(
"1) Ordenarn"
)
;
printf
(
"2) Mostrarn"
)
;
printf
(
"3) Buscarn"
)
;
printf
(
"4) Modificarn"
)
;
printf
(
"5) Salirn"
)
;
scanf
(
"%d"
,&
c
)
;
switch
(
c
)
{
case
1
:
{
printf
(
"Ingrese 1 para ordenar por codigo, 2 para ordenar por modelon"
)
;
scanf
(
"%d"
,&
codigo_orden
)
;
//ordenar (prod,cant_prod,codigo_orden);
}
break
;
case
2
:
{
printf
(
"Ingrese Modelo Buscadon"
)
;
scanf
(
"%s"
,
modelo_buscado
)
;
// mostrar(prod,cant_prod,modelo_buscado);
}
break
;
case
3
:
{
printf
(
"Ingrese codigo buscadon"
)
;
scanf
(
"%s"
,
codigo_buscado
)
;
puntero
=
buscar
(
prod
,
cant_prod
,
codigo_buscado
)
;
}
}
}
while
(
c
!=
5
)
;
}
struct
productos
*
buscar
(
struct
productos
*
p
,
int
cant
,
char
cod
[
]
)
{
int
i
;
for
(
i
=
0
;
i
<
cant
;++
i
)
{
if
(
strcmp
(
cod
,
(
p
+
i
)
->
codigo
)
==
0
)
return
(
p
+
i
)
;
}
}
void
carga
(
struct
productos p
[
]
,
int
*
cant
)
{
int
i
=*
cant
;
char
r
;
do
{
printf
(
"Ingrese Codigon"
)
;
scanf
(
"%s"
,&
p
[
i
]
.
codigo
)
;
fflush
(
stdin
)
;
printf
(
"Ingrese Modelon"
)
;
gets
(
p
[
i
]
.
modelo
)
;
printf
(
"Ingrese Descripcionn"
)
;
gets
(
p
[
i
]
.
descripcion
)
;
printf
(
"Ingrese Precion"
)
;
scanf
(
"%f"
,&
p
[
i
]
.
precio
)
;
printf
(
"Ingrese Cod proveedorn"
)
;
scanf
(
"%s"
,
p
[
i
]
.
codprov
)
;
fflush
(
stdin
)
;
printf
(
"Ingrese Nombre proveedorn"
)
;
gets
(
p
[
i
]
.
nomprov
)
;
i
++;
printf
(
"Seguir ingresando datos?n"
)
;
fflush
(
stdin
)
;
scanf
(
"%c"
,&
r
)
;
}
while
(
r
!=
'n'
)
;
*
cant
=
i
;
}
betopin
Miembro activo
Mensajes: 93
Nacionalidad:
Re: Retornar un puntero a una estructura
«
Respuesta #3 en:
Miércoles 29 de Abril de 2009, 03:32 »
0
Citar
se usa *buscar en vez de buscar y porque se usa *p en vez de p[]
la defino *buscar porque debes retornar un puntero que para el caso es un puntero a una estructura
y *p...bueno eso, segun lo que plantean en el enunciado que pusiste podrias tambien manejarlo como p[], la cuestion es recibir los datos de la estructura... En mi caso concreto no estoy acostrumbrado a declarar parametros de esa forma sino que prefiero siempre definir el puntero en propiedad...aunque cuidado, recuerrda que si vas a usar punteros a estructuras, ya sea fuera o dentro de la funcion tendras que utilizar el operador ->
Saludos
Programas en C]
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Retornar un puntero a una estructura