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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con apuntadores!!!!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con apuntadores!!!!!!  (Leído 4,254 veces)
7hongo7

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Problema con apuntadores!!!!!!
« en: 1 Julio 2013, 06:00 am »

Hola de nuevo aqui molestandolos de nuevo pero tengo un problema con un programa sobre apuntadores, en el programa nosotros tenemos que adivinar el numero que la computadora genera con apuntadores el problema es que al momento de ejecutar solamente tengo la primera oportunidad no me da las otras oportunidades y dice "violacion de segmento core generado", este es mi codigo alguien me puede ayudar muchas gracias!!!!!!


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

int main()
{
        int num,com,i,ii=0;
        int *numero,*computadora,*opcion;
        numero = &num;
        computadora = &com;
        opcion = &i;
        printf("Juego que adivina el numero de la computadora<----------\n");
        srand(time(NULL));
        *computadora = (rand()%50)+1;
        printf("Tienes 7 oportunidades para adivinar el numero\n");
        for(*opcion=1;*opcion<=7;opcion++){
                printf("%d oportunidad---->",ii+1);
                scanf("%d",opcion);
                if(*computadora<*opcion)
                        printf("Mi numero es meno\n");
                else if(*computadora>*opcion)
                        printf("Mi numero es mayor\n");
                else
                        printf("Acertaste");
                        exit(1);
        }
        printf("Lastima se te acabaron las oportunidades\n");
        printf("%d",*computadora);
        return 0;
}


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema con apuntadores!!!!!!
« Respuesta #1 en: 1 Julio 2013, 07:58 am »

Código
  1. for(*opcion=1;*opcion<=7;opcion++)

en el último "opcion" te falta un asterisco... si no lo pones lo que haces es modificar la dirección a la que apunta el puntero.

Código
  1. for(*opcion=1;*opcion<=7;(*opcion)++)


En línea

7hongo7

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Re: Problema con apuntadores!!!!!!
« Respuesta #2 en: 1 Julio 2013, 20:23 pm »

Código
  1. for(*opcion=1;*opcion<=7;opcion++)

en el último "opcion" te falta un asterisco... si no lo pones lo que haces es modificar la dirección a la que apunta el puntero.

Código
  1. for(*opcion=1;*opcion<=7;(*opcion)++)

Hago l cambio como me dices pero me sigue dando solamente una oportunidad acierte o no el numero de la computadora, realmente no se como hacerlo y sobre la violacion de segmento ya no me aparece ahora si compila bien jejejeje :P :P
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema con apuntadores!!!!!!
« Respuesta #3 en: 1 Julio 2013, 21:30 pm »

Código
  1.          if(*computadora<*opcion)
  2.                        printf("Mi numero es meno\n");
  3.                else if(*computadora>*opcion)
  4.                        printf("Mi numero es mayor\n");
  5.                else
  6.                        printf("Acertaste");
  7.                        exit(1);

ese exit( 1 ) se va a ejecutar siempre.

Si quieres que un if o un else abarque más de una instrucción tienes que ponerlo entre llaves.

Más cosas... estás almacenando el dato del usuario en opcion y aparte usas esa variable para comprobar que no se pasa de 7 intentos... no va a funcionar.

Y además, personalmente, prefiero no usar exit salvo causas de fuerza mayor... yo lo dejaría así:

Código
  1. int main()
  2. {
  3.  int num,com,i;
  4.  int acertado = 0;
  5.  int *numero,*computadora,*opcion;
  6.  numero = &num;
  7.  computadora = &com;
  8.  opcion = &i;
  9.  printf("Juego que adivina el numero de la computadora<----------\n");
  10.  srand(time(NULL));
  11.  *computadora = (rand()%50)+1;
  12.  printf("Tienes 7 oportunidades para adivinar el numero\n");
  13.  for(*opcion=1;(*opcion<=7) && (acertado == 0);(*opcion)++)
  14.  {
  15.    printf("%d oportunidad---->",*opcion);
  16.    scanf("%d",numero);
  17.    if(*computadora<*numero)
  18.      printf("Mi numero es meno\n");
  19.    else if(*computadora>*numero)
  20.      printf("Mi numero es mayor\n");
  21.    else
  22.    {
  23.      printf("Acertaste");
  24.      acertado = 1;
  25.    }
  26.  }
  27.  
  28.  if ( acertado == 0 )
  29.  {
  30.    printf("Lastima se te acabaron las oportunidades\n");
  31.    printf("%d",*computadora);
  32.  }
  33.  
  34.  return 0;
  35. }

Verás que también he eliminado el uso de ii... ya tienes esa información en la variable *opcion, luego es redundante... aparte de que no incrementabas nunca el valor de dicha variable.

Deberías aprender a usar los depuradores para corregir los errores de tu código.

Un saludo
En línea

7hongo7

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Re: Problema con apuntadores!!!!!!
« Respuesta #4 en: 3 Julio 2013, 22:39 pm »

Muchas gracias eferion me sirvio muchisimo tu codigo, fue una buena guia para poder hacer mi programa y te haré caso con lo del depurador, es que soy algo nuevo en esto de la programacion de nuevo muchas gracias ;-) ;-) ;-) ;-)
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con apuntadores!!!!!!
« Respuesta #5 en: 5 Julio 2013, 04:14 am »

Otra opción es utilizar una sentencia "break;" dentro del bucle:
Código
  1. puts("Tienes 7 oportunidades para adivinar el numero");
  2. for (*opcion = 1; *opcion < 8; (*opcion)++){
  3.   printf("%d oportunidad---->", *opcion);
  4.   fflush(stdout);
  5.   scanf("%d", numero);
  6.  
  7.   if (*computadora < *numero)
  8.      puts("Mi numero es menor");
  9.   else if(*computadora > *numero)
  10.      puts("Mi numero es mayor");
  11.   else
  12.      break;
  13. }
  14.  
  15. if (*opcion < 8)
  16.   printf("Acertaste en tu %d oportunidad\n", *opcion);
  17. else {
  18.   printf("Lastima se te acabaron las oportunidades");
  19.   printf(" (%d)\n", *computadora);
  20. }

La desventaja es el mentado salto mientras que la ventaja es evitar el uso de la bandera. Cuestión de estilos.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema con apuntadores!!!!!!
« Respuesta #6 en: 5 Julio 2013, 08:08 am »

Otra opción es utilizar una sentencia "break;" dentro del bucle:

...

La desventaja es el mentado salto mientras que la ventaja es evitar el uso de la bandera. Cuestión de estilos.

Exacto, yo es que vengo de un proyecto donde las aplicaciones tienden a ser monstruosas y es fácil encontrarse una docena de breaks en un for... se te cae el alma a los pies cuando tienes que depurar eso XDDDD
En línea

kmilinh0

Desconectado Desconectado

Mensajes: 16



Ver Perfil
Re: Problema con apuntadores!!!!!!
« Respuesta #7 en: 5 Julio 2013, 10:16 am »

sabes que sino depuras tu mismo no vas a aprender? Una cosa es tener dudas en algo y otra que al primer segmention fault q te salga pongas tu código para q te lo arreglen. Si ves las horas que muchos hemos estado poniendo prints y usando el GDB...
Para las violaciones de segmento lo mejor es ejecutar con el GDB, tiene infinidad de posibilidades. Por ejemplo, si te sale una violacion de segmento puedes saber en que linea ha sido y mirar pq pasa esto. Anda lee un poco xD :
http://users.dcc.uchile.cl/~lmateu/CC41C/gdb.txt
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C++] problema con apuntadores en class [SOLUCIONADO]
Programación C/C++
STANHMAL 2 2,355 Último mensaje 16 Abril 2012, 02:26 am
por STANHMAL
Preguntillas sobre apuntadores en c++
Programación C/C++
vazquinhos 3 2,100 Último mensaje 23 Agosto 2012, 03:02 am
por ecfisa
Ayudenme con apuntadores sii?
Programación C/C++
thapitufa 1 1,981 Último mensaje 2 Diciembre 2012, 06:42 am
por x64core
ayuda con manejo de cadenas y apuntadores
Programación C/C++
rod00x3 5 2,764 Último mensaje 7 Enero 2013, 19:24 pm
por rod00x3
Problema con estructuras y apuntadores
Programación C/C++
angelihsahn 2 2,280 Último mensaje 31 Agosto 2013, 12:27 pm
por lanun
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines