Validacion numerica

Enadan
18 de Agosto del 2009
Hola a todos, soy nuevo en esto de programacion en C, y estoy haciendo un programa que recoge una serie de datos por pantalla con scanf, y funciona bien siempre y cuando el usuario haga lo que yo le digo, que introduzca un numero entre 001-999, pero si el tio mete una letra y pulsa intro se lio, me entra en un bucle infinito y apaga y vamonos.

Queria saber si hay alguna funcion en alguna de las librerias estandar de sistema para la validacion numerica, y ya puestos, si de paso se pudiera restringir el numero de digitos introducidos a tres ya seria la leche!!!

Bueno, muchas gracias a todos!!

P.D. Por lo que he visto algo muy importante en C son las librerias, pero no se donde conseguir informacion de todas las que hay y de las funciones que contienen (Estoy hablando de ANSI C)

Saludos, Enadan

Super Pebete
18 de Agosto del 2009
No NO NON ONONO!!!!
En ansi C no existe una funcion que restringa a 3 digitos el flujo por el teclado.
El problema que tenes vos es porque no sabes manejar el BUFFER del teclado
a scanf hay que usarla en conjuncion con la funcion
flushbuffer
busca por la red y aprende a usarla.

Super Pebete
18 de Agosto del 2009
No NO NON ONONO!!!!
En ansi C no existe una funcion que restringa a 3 digitos el flujo por el teclado.
El problema que tenes vos es porque no sabes manejar el BUFFER del teclado
a scanf hay que usarla en conjuncion con la funcion
flushbuffer
busca por la red y aprende a usarla.

Super Pebete
18 de Agosto del 2009
No NO NON ONONO!!!!
En ansi C no existe una funcion que restringa a 3 digitos el flujo por el teclado.
El problema que tenes vos es porque no sabes manejar el BUFFER del teclado
a scanf hay que usarla en conjuncion con la funcion
flushbuffer
busca por la red y aprende a usarla.
El ejemplo que te dieron usa la libreria CONIO.H
que es de BORLAND, no es ANSI C
busca por la red STANDAR C LIBRARY y vas a encontrar referencia de todas sus funciones

Super Pebete
18 de Agosto del 2009
No NO NON ONONO!!!!
En ansi C no existe una funcion que restringa a 3 digitos el flujo por el teclado.
El problema que tenes vos es porque no sabes manejar el BUFFER del teclado
a scanf hay que usarla en conjuncion con la funcion
flushbuffer
busca por la red y aprende a usarla.
El ejemplo que te dieron usa la libreria CONIO.H
que es de BORLAND, no es ANSI C
busca por la red STANDAR C LIBRARY y vas a encontrar referencia de todas sus funciones

MAURICIO BALLEZA TORRES
18 de Agosto del 2009
HOLA A TODOS , SOY NUEVO EN ESTO DE PROGRAMACION PERO NECESITO UN PROGRAMA DEL ANALISADOR LEXICO Y UN PROGRAMA DE UN BUFFER PAR DARME UNA IDEA DE COMO HACERLOS GRACIAS A TODOS Y SI ME PUEDEN AYUDAR

Ivan_Esperi
18 de Agosto del 2009
Saludos: un programa completo que hace lo que quieres, espero y te sirva.

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

// Funcion que valida un numero de 3 digitos como
// maximo

// devuleve el valor tecleado

int LeerInt(){

// Cadena temporal que almacena lo que el usuario
// teclea
char intTmp[4];

// Almacena el valor numerico que el usuario
// tecleo
int resultado;

// Para contar los caracteres que el usuario esta
// tecleando maximo 3
int contador = 0;

// Solo permite un maximo de 3 caracteres leidos
// desde el teclado
while(contador < 3){
// si se presiono una tecla
if(kbhit()){
// Leemos y almacenamos el caracter
intTmp[contador++] = getche();

// El usuario presiono enter
if(intTmp[contador - 1] == 13){
contador--;
break;
}

}

}

// Asignamos fin de cadena
intTmp[contador] = '';

// Recorremos el arreglo de caracteres
for(int indice = 0; indice < contador; indice++){
// Verificamos que solo se hayan tecleado digitos
if(!isdigit(intTmp[indice]))
// Si no es digito devolvemos 0
return 0;
}

// Si encontramos puros digitos regresamos su
// valor numerico
return atoi(intTmp);
}

void main(){
clrscr();
int numero;

printf("Teclea un valor entre 001 - 999n");

// alamcena el valor tecleado
numero = LeerInt();

if(numero <= 0 || numero > 999)
printf("nValor invalido");
else{
printf("nEl valor tecleado:n");
printf("%d", numero);
}

getch();
}

alexjpm
18 de Agosto del 2009
hola a todos necesito un programa que permita almacenar un numero entero leido por el teclado en un arreglo de caracteres ¿quien me ayuda?

god2710
18 de Agosto del 2009
Mira, existe una funcion que conozco que se llama isdigit()..
Funciona asi, cargas en una variable el dato que quieres que sea entera y entonces lo pones como argumento de isdigit y este te devuelve 1 si es un numero y devuelve 0 si no es un numero, ve si te sirve...