¡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!");
}
}
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.
Ya los he corregido todos, pero ahora cuando escribo un numero mayor a 9 se acaba el código.
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?
Esto es lo que sale:
Quel est le nombre? 8
Mas! Intenta otra vez: 80
Process returned 80(0x50)
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!
¡Gracias! Ahora a mirar un poco el algoritmo :)
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:#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)