Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Sobrelouis123 en 14 Junio 2013, 21:32 PM

Título: Problema en C. ¿Os pasa lo mismo?
Publicado por: Sobrelouis123 en 14 Junio 2013, 21:32 PM
¡Hola! Hoy he estado haciendo un ejercicio en C, que consistía en crear un juego en consola en el que se crea una variable random y el usuario tiene que adivinarla. Code::Blocks no me da ningún error, pero cuando doy un numero me da un error (el típico error de que el programa no responde).

Estos son los detalles del error:
Firma con problemas:
  Nombre del evento de problema:   APPCRASH
  Nombre de la aplicación:   tp1.exe
  Versión de la aplicación:   0.0.0.0
  Marca de tiempo de la aplicación:   51bb6c81
  Nombre del módulo con errores:   msvcrt.dll
  Versión del módulo con errores:   7.0.7601.17744
  Marca de tiempo del módulo con errores:   4eeaf722
  Código de excepción:   c0000005
  Desplazamiento de excepción:   0001ecc0
  Versión del sistema operativo:   6.1.7601.2.1.0.768.3
  Id. de configuración regional:   3082
  Información adicional 1:   0a9e
  Información adicional 2:   0a9e372d3b4ad19135b953a78882e789
  Información adicional 3:   0a9e
  Información adicional 4:   0a9e372d3b4ad19135b953a78882e789


Y este es el código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    const int MAX = 100, MIN = 1;
    int numero = 0;
    int nombreMystere = 0;
    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    printf("Quel est le nombre? ");
    scanf("%d", numero);
    while (numero > nombreMystere)
    {
        printf("Menos! Intenta otra vez");
        scanf("%d", numero);
    }
    while (numero < nombreMystere)
    {
        printf("Mas! Intenta otra vez");
        scanf("%d", numero);
    }
    while (numero == nombreMystere)
    {
        printf("Has ganado!");
    }
}

Título: Re: Problema en C. ¿Os pasa lo mismo?
Publicado por: 0xDani en 14 Junio 2013, 22:08 PM
Fíjate en esta línea:

scanf("%d", numero);

En la función scanf, el especificador "%d" espera que se le pase la dirección de un int, no un int.

Prueba a sustituirla por esto:

scanf("%d", &numero);

Así le pasas la dirección de la variable, y no la variable misma, que en este caso está inicializada a 0, por lo que te puedes imaginar que scanf está intentando escribir en la dirección 0 en memoria.

Saludos.
Título: Re: Problema en C. ¿Os pasa lo mismo?
Publicado por: Sobrelouis123 en 14 Junio 2013, 22:26 PM
Ya los he corregido todos, pero ahora cuando escribo un numero mayor a 9 se acaba el código.
Título: Re: Problema en C. ¿Os pasa lo mismo?
Publicado por: 0xDani en 14 Junio 2013, 22:48 PM
Cita de: Sobrelouis123 en 14 Junio 2013, 22:26 PM
Ya los he corregido todos, pero ahora cuando escribo un numero mayor a 9 se acaba el código.

A qué te refieres exactamente con eso? Es decir, qué es exactamente lo que pasa?
Título: Re: Problema en C. ¿Os pasa lo mismo?
Publicado por: Sobrelouis123 en 14 Junio 2013, 22:57 PM
Esto es lo que sale:
Quel est le nombre? 8
Mas! Intenta otra vez: 80
Process returned 80(0x50)
Título: Re: Problema en C. ¿Os pasa lo mismo?
Publicado por: xiruko en 14 Junio 2013, 23:06 PM
Tienes un problema con el algoritmo, debería ser algo así:

do
{
   scanf("%d", &numero);
   if (numero > nombreMystere)
   {
         printf("Menos! Intenta otra vez\n");
   }
   else if (numero < nombreMystere)
   {
         printf("Mas! Intenta otra vez\n");
   }
} while (numero != nombreMystere);

printf("Has ganado!\n");


Saludos!
Título: Re: Problema en C. ¿Os pasa lo mismo?
Publicado por: Sobrelouis123 en 14 Junio 2013, 23:13 PM
¡Gracias! Ahora a mirar un poco el algoritmo :)
Título: Re: Problema en C. ¿Os pasa lo mismo?
Publicado por: leosansan en 15 Junio 2013, 00:10 AM
Además de lo comentado por , tienes de sobra el bucle para cuando son igualea, porque te hace entrar en en bucle sin salida.
[quote author=Sobrelouis123 link=topic=392565.msg1861407#msg1861407 date=1371238348]
.........................................................................
   while (numero == nombreMystere)
   {
       printf("Has ganado!");
   }
}



Funcionado, sin apenas modificar tu código original sería:

Código (cpp) [Seleccionar]
#include <stdlib.h>
#include <time.h>

int main()
{
   const int MAX = 100, MIN = 1;
   int numero = 0;
   int nombreMystere = 0;
   srand(time(NULL));
   nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
   puts("Quel est le nombre? ");
   scanf("%d", &numero);

       while (numero > nombreMystere)
       {
           puts("Menos! Intenta otra vez");
           scanf("%d", &numero);
       }
       while (numero < nombreMystere)
       {
           puts("Mas! Intenta otra vez");
           scanf("%d", &numero);
       }
       puts("Has ganado!");
       return 0;
}


Saluditos!.
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)