C/Visual C - validar entrada de solo numeros

 
Vista:

validar entrada de solo numeros

Publicado por Armando Montoya (1 intervención) el 26/04/2003 21:11:33
como puedo hacer para que al momento de pedir un dato numerico, el usuario solo pueda teclear digitos y no letras ya que aunque ponga el formato de numeros en un scanf, ocurren cosas raras

int numero;
scanf("%d",numero);
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:validar entrada de solo numeros

Publicado por chuidiang (677 intervenciones) el 26/04/2003 21:23:15
No puedes evitar que el usuario teclee lo que quiera. Lo que tienes que hacer es leer la línea completa como una cadena de caracteres y luego analizarla con cuidado. Puedes usar funciones con sscanf (), isdigit(), etc.
Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:validar entrada de solo numeros

Publicado por Victor Daniel Velazquez Ramos (1 intervención) el 29/04/2003 06:11:19
Hola yo hice esta funcion con la que puedes validar en tiempo de ejecucion y nadamas permite la entrada de puros numeros , hasta que presiones esc o des enter o tabulador. espero que te sirva..

#include "stdio.h"
#include "conio.h"
#include "ctype.h"
#include "stdlib.h"

void lee_num(int x, int y, int max, char tipo, char *cad);

void main(void){

int x,y,tam,num;
char temp[5];
char *aux;

aux=temp;

tam=4;
x=10;
y=5;

clrscr();
lee_num(x,y,tam,' ',aux); {' ' estas son para el caracter de borrado}
gotoxy(20,10); printf(" numero %s",temp);
num=atoi(temp);
gotoxy(20,11); printf(" numero %d",num);

getch();
}//funcion main

/*---------------------------------------------------------------------------
Con esta funcion leemos un numero en una posicion determinada de la pantalla
---------------------------------------------------------------------------*/
void lee_num(int x, int y, int max, char tipo, char *cad){
char car;
int i;

_setcursortype(_SOLIDCURSOR);
gotoxy(x,y); cprintf("%c",tipo);
gotoxy(x,y);

i=0;

do{
car='\0';
car=getch(); /*leemos el caracter*/

/*si es una letra o un numero y no superamos el limite del arreglo*/
if(isdigit(car) && !iscntrl(car) && i < max){
gotoxy(x,y); cprintf("%c",car); /*la escribimos en pantalla*/
*(cad+i) = car; /*y la guardamos en la cadena*/
x++; /*y aumentamos la coord en x*/
i++; /*y la posicion en la cadena*/
gotoxy(x,y);
}/*sentencia if*/

else if( car == '\b' && i > 0){ /*si quiere borrar el ultimo caracter*/
gotoxy(x-1,y); printf("%c",tipo); /*hasta que borre el primero*/
*(cad+i)='\0';
x--;
i--;
gotoxy(x,y);
}/*sentencia else if*/

/*Mientras no sea esc, tab, enter,*/
}while( car !='\x1b' && car != '\t' && car != '\r');

if(car == '\x1b'){ /*si fue esc, tenemos cadena vacia*/
*(cad+i)=car;
i++;
}/*sentencia if*/

*(cad+i)='\0'; /*pones el fin de cadena, para no desbordar el arreglo*/
_setcursortype(_NOCURSOR);
}/*funcion lee_num*/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar