Leer un entero de teclado en C


Sin usar scanf, porque no sirve para leer de teclado.

#include<stdlib.h>
#include<stdio.h>

#define MAX_DIGITS 9
#define BASE 10

static int* BUFFER = NULL;

int* readInt()
{
int i = 0,
j = 0,
base = 1,
factor = 1,
*result,
ch = getchar();
if(BUFFER == NULL){
BUFFER = malloc(MAX_DIGITS * sizeof(int));
}
if(ch == 45){
factor = -1;
ch = getchar();
}
while(i < MAX_DIGITS && ch != 10 && ch != -1 && 48 <= ch && ch <= 57){
BUFFER[i++] = ch;
ch = getchar();
}

if(i == 0 || (ch != 10 && ch != -1)){
while(ch != 10 && ch != -1){
/* consumo lo que haya en el buffer para vaciarlo.*/
ch = getchar();
}
return NULL;
}
/* transformo el string en un entero según la base.*/
result = (int*) malloc(sizeof(int));
*result = 0;
/* De atrás para adelante, multiplicando por la base y sumando.*/
for(j = i – 1; j >= 0; j = j-1){
*result += ( BUFFER[j] – 48 ) * base;
base *= BASE;
}
/* aplico el signo*/
*result *= factor;
return result;
}

About these ads

6 pensamientos en “Leer un entero de teclado en C

  1. Pingback: La función scanf y la lectura de la entrada de teclado « Ignorante

  2. Holap:

    Es cierto todo lo que planteas en el otro post, pero vamos, hay muchas soluciones, por ejemplo:

    1.- Poner condiciones de excepción por si el usuario comete errores…
    2.- Usar la famosa función “fflush()”…

    …es cierto que no hay control sobre la cantidad de caracteres que ingrese el usuario, pero no vamos a sacrificar y descartar por completo a “scanf()” sólo por eso… xD

    Saludooos :P

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s