Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Miky Gonzalez en 28 Septiembre 2013, 12:01 pm



Título: [Ayuda-C] Leer entero desde stdin
Publicado por: Miky Gonzalez en 28 Septiembre 2013, 12:01 pm
Mi problema es el siguiente: supongamos que sólo tengo una función que me permite cojer 1 solo caracter numérico (getch() - 48). ¿Cómo podría hacer para cojer mas de un caracter?.

Si no lo entiendo les pongo un ejemplo: yo tengo una variable tipo entero. Hago que se guarde el valor devuelto por getch() a mi variable tipo entero. Algo como:
Código
  1. Introduce un numero: 4
  2. Numero introducido: 4
El problema viene cuando:
Código
  1. Introduce un numero: 42
  2. Numero introducido: 4
Como es de obviar, el 2 se queda en el buffer. Cómo puedo hacer, suponiendo que sólo tengo la función getch que sólo lee un caracter, la lectura de enteros (hasta encontrar caracter 0xA ('\n'). Supongamos tambien que el valor devuelto por getch() es de tipo entero.


Título: Re: [Ayuda-C] Leer entero desde stdin
Publicado por: erest0r en 28 Septiembre 2013, 19:56 pm
No se si sea la mejor solucion, si dices que getch() devuelve un entero, yo incluiria el getch() dentro de un bucle, luego verifico que el valor introducido sea distinto de '\n', si es asi, luego verifico que este entro 0 - 9, y si es asi entonces ese numero lo guardo en un arreglo de chars, cuando el usuario introduzca '\n', entonces se sale del bucle y transformas esa cadena de caracteres a int, asi lo haria yo.

EDIT: Alli estoy asumiendo que el usuario esta introduciendo el numero sin equivocarse, porque si lo escribe mal y quiere borrar, este codigo no hara eso jeje


Título: Re: [Ayuda-C] Leer entero desde stdin
Publicado por: rir3760 en 29 Septiembre 2013, 02:50 am
supongamos que sólo tengo una función que me permite cojer 1 solo caracter numérico (getch() - 48). ¿Cómo podría hacer para cojer mas de un caracter?.
Utilizas un bucle donde lees cada uno de los dígitos utilizando estos para generar el numero, el resto de la linea (por lo menos el '\n') lo descartas con otro bucle.

Un ejemplo básico (sin validaciones) utilizando la función getchar (tu caso es similar):
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int ch;
  7.   int num;
  8.  
  9.   printf("Introduce el numero: ");
  10.   fflush(stdout);
  11.   num = 0;
  12.   /* Procesamos cada uno de los digitos */
  13.   while ((ch = getchar()) >= '0' && ch <= '9')
  14.      num = num * 10 + ch - '0';
  15.   /* Descartamos el resto de la linea */
  16.   while (ch != EOF && ch != '\n')
  17.      ch = getchar();
  18.  
  19.   printf("num == %d\n", num);
  20.  
  21.   return EXIT_SUCCESS;
  22. }

Un saludo