Dev - C++ - Ayuda en programa generador de numero aleatorio

 
Vista:

Ayuda en programa generador de numero aleatorio

Publicado por Kempis (1 intervención) el 26/01/2017 06:55:08
Buenas, estoy haciendo un programa que genera un numero aleatorio entre 1 a 20, el usuario debe adivinarlo, si el numero es mayor a 20 manda mensaje de error y si es menor a 0 también, hasta allí todo bien, el problema es cuando ingresa una letra (vocal o consonante) o un caracter que no tenga que ver con un numero, por ejemplo un guion, un signo +, etc.
Como hago para que el programa detecte que no es un numero? Para de esta manera poder enviar una alerta al usuario diciéndole que el dato ingresado no es un numero

Gracias a todos los que decidan responderme, que tengan un buen día.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda en programa generador de numero aleatorio

Publicado por agustin (522 intervenciones) el 26/01/2017 09:22:32
Usa un array de caracteres y cuando ingrese algo el usuario compruebas que solo haya caracteres válidos y si es así conviertes la cadena a número con sprintf, atoi, o a mano. Hacerlo a mano es muy fácil tambien:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <math.h>
 
int main ()
{
	char buffer[10];
	int valor,i,pos;
	printf ("introduce un numero: ");
	scanf ("%s", buffer);
 
	for (pos=0; buffer[pos] != '\0'; pos++); //obtengo el largo de la cadena
 
	//modo 1 de pasar de cadena a numero
	valor=0;
	for (i=0; i < pos; i++){
		valor += (buffer[i]-'0') * pow(10,(pos-1-i));
	}
	printf ("el valor es: %i\n",valor);
 
	//modo 2
	valor=0;
	for (i=pos-1; i >= 0; i--){
		valor += (buffer[i]-'0') * pow(10,pos-1-i);
	}
	printf ("el valor es: %i\n",valor);
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda en programa generador de numero aleatorio

Publicado por agustin (522 intervenciones) el 27/01/2017 18:23:47
Yo lo terminaria con algo asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include <math.h>
 
int main ()
{
	char buffer[10];
	int valor, v_aleatorio,i,pos;
 
    srand(time(NULL));
 
    v_aleatorio=rand()%20;
 
    //En este bucle nos encargamos de pedir un valor que cumpla con las condiciones que deseamos
    //Una vez salga tendremos un valor bueno
    do{
	    printf ("introduce un numero: ");
	    scanf ("%s", buffer);
 
	    for (pos=0; buffer[pos] != '\0'; pos++); //obtengo el largo de la cadena
 
        //Compruebo el numero de caracteres numericos que hay
        for (i=0; isdigit(buffer[i]); i++);
 
        valor=0; //Inicializo la variable que almacenará el valor
 
        //Si el largo de la cadena y el numero de digitos numericos coincide es que solo hay numeros
        if(pos==i){
 
	        for (i=0; i < pos; i++){
		        valor += (buffer[i]-'0') * pow(10,(pos-1-i));
            }
 
            if(valor < 0 || valor > 20)
                printf("El valor del numero esta fuera del rango valido.\n");
            else if(valor > v_aleatorio)
                printf("Menor\n");
            else if(valor < v_aleatorio)
                printf("Mayor\n");
            else
                printf("Acertaste!!!\n");
        }else{
            printf("Caracteres no validos. Vuelve a intentarlo.\n");
            valor=-1; //Esto es para que repita el bucle y vuelva a pedir un valor
        }
    }while(valor != v_aleatorio);
 
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar