Problema en C. ¿Os pasa lo mismo?

Iniciado por Sobrelouis123, 14 Junio 2013, 21:32 PM

0 Miembros y 1 Visitante están viendo este tema.

Sobrelouis123

¡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!");
    }
}

14 años.
Python: 70%
javascript: 50%
C: 25%
HTML & CSS: 100%
Observando se aprende.

0xDani

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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Sobrelouis123

Ya los he corregido todos, pero ahora cuando escribo un numero mayor a 9 se acaba el código.
14 años.
Python: 70%
javascript: 50%
C: 25%
HTML & CSS: 100%
Observando se aprende.

0xDani

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?
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Sobrelouis123

Esto es lo que sale:
Quel est le nombre? 8
Mas! Intenta otra vez: 80
Process returned 80(0x50)
14 años.
Python: 70%
javascript: 50%
C: 25%
HTML & CSS: 100%
Observando se aprende.

xiruko

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!

Sobrelouis123

¡Gracias! Ahora a mirar un poco el algoritmo :)
14 años.
Python: 70%
javascript: 50%
C: 25%
HTML & CSS: 100%
Observando se aprende.

leosansan

#7
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!.