[Ayuda-C] Leer entero desde stdin

Iniciado por Miky Gonzalez, 28 Septiembre 2013, 12:01 PM

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

Miky Gonzalez

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:
Introduce un numero: 4
Numero introducido: 4

El problema viene cuando:
Introduce un numero: 42
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.
Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:

EN CONSTRUCCIÓN

erest0r

#1
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
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.

rir3760

Cita de: Miky Gonzalez en 28 Septiembre 2013, 12:01 PM
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):
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int ch;
   int num;
   
   printf("Introduce el numero: ");
   fflush(stdout);
   num = 0;
   /* Procesamos cada uno de los digitos */
   while ((ch = getchar()) >= '0' && ch <= '9')
      num = num * 10 + ch - '0';
   /* Descartamos el resto de la linea */
   while (ch != EOF && ch != '\n')
      ch = getchar();
   
   printf("num == %d\n", num);
   
   return EXIT_SUCCESS;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language