elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con Punteros - Me tira error en todas las lineas.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con Punteros - Me tira error en todas las lineas.  (Leído 1,592 veces)
palacio29

Desconectado Desconectado

Mensajes: 103


Ver Perfil
Duda con Punteros - Me tira error en todas las lineas.
« en: 15 Septiembre 2016, 01:49 am »

Hola

Estoy haciendo un ejercicio de punteros. El ejercicio consta en el que tengamos un struct con el numero de una carta, su valor y el tipo de carta (espada,copa,oro,basto,etc). Lo que tengo que hacer es cargar 3 variables de este tipo y con punteros, ordenarlas de manera que si una carta es de mayor valor, tiene que mostrarse primero y el espacio de memoria debe ser intercambiado por la carta que tiene un valor menor. No se si me explico.

En el struct va ordenado  ( numero de la carta (Ejemplo 1), valor de la carta (Si es un ancho de espadas va un 10 por ejemplo), y el palo de la carta (e = espada, c= copa, o = oro , b = basto)
Hasta ahora hice lo siguiente

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct
  4. {
  5. int numero;
  6. int valor;
  7. char palo;
  8. }
  9. t_carta;
  10.  
  11. void INTERCAMBIO(t_carta *,t_carta *  ,t_carta * );
  12. int main()
  13. {
  14.    t_carta c1,c2,c3;
  15.    c1.numero=3;
  16.    c1.palo='c';            ///Cargo las 3 Cartas
  17.    c1.valor=6;
  18.    c2.numero=1;
  19.    c2.valor=10;
  20.    c2.palo='e';
  21.    c3.numero=3;
  22.    c3.valor=6;
  23.    c3.palo='c';
  24.  
  25.    printf ("Cartas Sin Ordenar\n");
  26.    printf ("%d - %d - %c",c1.numero,c1.valor,c1.palo);
  27.    printf ("%d - %d - %c",c2.numero,c2.valor,c2.palo);  ///Imprimo las 3 CARTAS SIN ORDENARLAS
  28.    printf ("%d - %d - %c\n",c3.numero,c3.valor,c3.palo);
  29.  
  30.    INTERCAMBIO(&c1,&c2,&c3);   /// Le paso la direccion de memoria de las 3 cartas a la funcion!
  31.  
  32.    printf ("Ordenado:\n");
  33.    printf ("%d - %d - %c",c1.numero,c1.valor,c1.palo);
  34.    printf ("%d - %d - %c",c2.numero,c2.valor,c2.palo);
  35.    printf ("%d - %d - %c\n",c3.numero,c3.valor,c3.palo);
  36.  
  37.    return 0;
  38. }
  39. void INTERCAMBIO(t_carta *pa,t_carta *pb  ,t_carta *pc)   ///Y ACA SALE TODO ERROR!!! T_T
  40. {
  41.    t_carta aux;
  42.  
  43.    if ((*pa->valor)<(*pb->valor))
  44.    {
  45.        aux=*pb.valor;
  46.        *pb.valor=*pa.valor;
  47.        *pa.valor=aux;
  48.    }
  49.    if (*pb.valor<*pc.valor)
  50.    {
  51.        aux=*pc.valor;
  52.        *pc.valor=*pb.valor;
  53.        *pb.valor=aux;
  54.    }
  55.    if (*pa.valor<*pc.valor)
  56.    {
  57.        aux=*pc.valor;
  58.        *pc.valor=*pa.valor;
  59.        *pa.valor=aux;
  60.    }
  61.  
  62.  
  63.  
  64.  
  65.  
  66. }


En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Duda con Punteros - Me tira error en todas las lineas.
« Respuesta #1 en: 15 Septiembre 2016, 02:40 am »

Tienes que ver un poco mas el tema de los punteros pues tienes varios problemas de concepto. Primero, al simbolo "*" antepuesto a una variable declarada como puntero es el simbolo derreferenciador de dicho puntero, o en otras palabras si usas esto:

Código
  1. int *p; // direccion de memoria de una variable entera
  2. int a = 3; // variable entera

Solo puedes asignar un valor de la forma:

Código
  1. *p = a; // derreferenciando el puntero, o lo que es lo mismo refiriendote directamente a la memoria de dicha variable y no a su direccion
  2. p = &a; // asignando la direccion de memoria de la variable entera

O sea, lo que estas haciendo en esta linea por ejemplo:

Código
  1. if ((*pa->valor)<(*pb->valor))

Es un error total, pues estas usando otro simbolo "->" que se usa para referirse al valor al que apunta tu direccion de memoria (en este caso pa/pb), pero a la vez lo estas derreferenciando, o lo que vendria siendo lo mismo, estas tratando una variable "no puntero" como puntero al utilizar luego el "->". Siendo las dos formas correctas:

Código
  1. if ((pa->valor) < (pb->valor)) // Forma 1
  2. if (((*pa).valor) < ((*pb).valor)) // Forma 2

Luego ese error lo sigues cometiendo a traves de el resto del codigo y hay algo mas en estas lineas:

Código
  1. aux=*pb.valor;
  2. *pa.valor=aux;

Tienes otro error de concepto. Primero declaras aux como variable de tipo structura t_carta y despues intentas asignar un valor tipo entero (pb->valor) a la variable aux que es tipo estructura. La forma correcta es:

Código
  1. aux = *pc; // Asignas la estructura completa derreferenciando el puntero
  2. aux.valor = pc->valor; // Asignas una variable entera a su igual en la estructura

Con esos arreglos deberian solucionarse los errores
Saludos


En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con punteros (error programa)
Programación C/C++
apoeti 7 3,230 Último mensaje 12 Agosto 2012, 01:19 am
por rir3760
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 4,949 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
¿Cómo escribir todas las líneas de un arreglo en un archivo de texto?
.NET (C#, VB.NET, ASP)
Juancho25 6 3,646 Último mensaje 3 Junio 2013, 09:57 am
por Eleкtro
Batch que copie todas las lineas menos la ultima
Scripting
santi810 1 1,856 Último mensaje 27 Diciembre 2013, 19:37 pm
por Eleкtro
Duda pentesting solo líneas de comandos
GNU/Linux
Rnovatis 2 2,050 Último mensaje 19 Mayo 2017, 00:20 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines