c++ introducir solo numeros

5star

Hola a todos, tengo un pequeño ejercicio que no se resolver. Consiste en hacer un ejercicio en C++ donde solamente te permita escribir numeros enteros.

Ejemplo: programa pide que introduzca la edad de una persona y que solamente pueda pulsar teclas que sean numéricos.. . se hacer en java que se hace con onkeypress.. pero en c no tengo ni idea y de momento no lo hemos dado...

PD: Aquí esta los ejercicios resuletos, mirad el apartado a y comprobad lo que sucede cuando pulsas un numero o letra: http://www.mediafire.com/?qq3n6k45284644z

Lo que es el ejercicio ya lo tengo todo hecho, y solamente me falta ese pequeño detalle de los putos numeros...

varuk

Si es para la edad, en este caso, ¿no se podría hacer con un simple Switch? Por ejemplo:

switch(variable)

{

case !0..99: Imprimir mensaje por pantalla ("Debes introducir un número entre 0 y 99");
break;

No sé ahora mismo si C++ acepta rangos así y cual sería la sintaxis exacta... pero por ahí podrían ir los tiros.

RaymaN
int n = getch();
if(n >= 0 && n <= 9) {
   printf("%d", n);
else
   printf("");

Con eso solo aceptas números, luego solo tienes que ir añadiendo el valor a la variable de edad, que en este caso creo que tendría que ser un array, por lo que lo veo una tontería xD

BLZKZ

#3 no seria mejor que utilizara los flujos de entrada/salida propios de c++ al programar en c++?

RaymaN

#4 por supuesto, solo le estoy poniendo un ejemplo en el que solo aceptaría la introducción de un número.

5star

#2 #3 gracias por las respuesta pero creo que me exprese mal, lo que intento hacer es que cuando el usuario va a poner su edad y en vez de poner un numero pone una letra, directamente el programa no hace nada y no muestra la tecla que has pulsado, y unicamente muestra las teclas pulsadas si son numericos...

RaymaN

#6 precisamente lo que te he puesto hace eso.

5star

Aqui esta el resultado del programa, pero el problema es que no puedo ver los codigos :¬¬: Mirad la primera opcion y veras como no deja pulsar nada excepto numeros
http://www.mediafire.com/?qq3n6k45284644z
Trankilos que no hay virus ;)

#6 ok ahora hago lo que habeis puesto, es que a simple vista me parecio que no era la solución.

dagavi

El código de #3 funciona pero tienes que cambiar algunas cosillas. getch() retorna el carácter leído, por lo que debes comparar con caracteres:

if(n <= '9' %% n >= '0')

Y por eso mismo escribir lo tienes que hacer como:

printf("%c", n);

Es decir, si escribes 0 no getch no te retorna un 0, si no un '0' que tiene valor 48 en decimal.

Por otro lado, getch no es estándar de C, es de la librería conio.h, aunque por lo que veo su uso está bastante extendido.

5star

#9 y #6 sería mucho pedir que me hicieras un sencillo ejercicio completo de esto? es que el método de hacer los ejercicio que hace el #6 es diferetne de lo que nos enseñan, aunque tenga el mismo objetivo... por ejemplo nosotros para escanear hacemos scanf("%i",etc.) y el lo hace de otra manera..

BLZKZ

#9 pero el problema es que aqui no se discute sobre c, sino sobre c++

modena

Estais entendiendo mal el problema, el no quiere que escribas una letra, le de a enter, almacene en una variable, y compare si es numero o no, el pide que si pulsas la "a" NO LA ESCRIBA directamente en la linea a leer.

(Pulsando "a" ) Escribe la edad:
(Pulsando "1" ) Escribe la edad: 1

Creo que eso es lo que pide vamos

5star

#12 exacto, además he colgado un link para que bajes el programa ejecutable solucionado, pero el probelma es que no puedo acceder a los códigos.

BLZKZ

#13 eso se hace con control de eventos y yo solo lo he hecho con la api del SO, en windows con la API propia y en linux lo mismo. No se si se puede de otra manera que sea multiplataforma

5star

#14 ya, en otros lenguajes se llama control de eventos y de echo las hice en java que se hacía con onkeypress.. pero es que no consigo encontrar para c++ y creo que se llama de otra manera... -_-"

BLZKZ

#15 se llama de la misma manera O_o. Busca por event handlers en google y tendras guías para aburrir

con WINAPI http://stackoverflow.com/questions/1437158/c-win32-keyboard-events

Usuarios habituales

  • BLZKZ
  • 5star
  • modena
  • dagavi
  • RaymaN
  • varuk