FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problema al validar enteros
Saludos!
Estoy aprendiendo a programar y tengo un problema bastante elemental con el cual espero me puedan orientar ya que no entiendo porqué no funciona. Hice una función para validar enteros tal como la que sigue: Código:
{ Función que lee un valor entrado y lo asigna a una variable entera si el dato introducido es entero y que devuelve si se ha realizado la asignación. } Function esEntero(temp:string; out numero:integer):boolean; Var error,x:integer; Begin Val(temp,x,error); If error=0 then Begin numero:=x; esEntero:=true; end else esEntero:=false; end; La cuestión es que he probado usando Longint para las variables x y numero pero no entiendo porque no funciona (he leído y releído la ayuda y no encuentro el fallo). Les adjunto lo que estoy probando: Código:
{ Función que lee un valor entrado y lo asigna a una variable entera (64bits) si el dato introducido es entero y que devuelve si se ha realizado la asignación. } Function esEntero64(temp:string; out numero:Longint):boolean; Var x:Longint; error:integer; Begin Val(temp,x,error); If error=0 then Begin numero:=x; esEntero64:=true; end else esEntero64:=false; end; Código:
Var temporal:string; entero64:Longint; Begin Repeat Write(' Introduce un entero: '); Readln(temporal); until esEntero64(temporal,entero64); Writeln(' El numero introducido es: ',entero64); Readln; end. |
#2
|
||||
|
||||
No comentas cuál es el fallo. Pero lo que te puedo decir es que LongInt es lo mismo que Integer, al menos para el compilador de 32 bits (desconozco si delphi tiene ya compilador de 64 bits). Existe el tipo de dato Int64 para 64 bits.
// Saludos |
#3
|
|||
|
|||
Gracias por el apunte sobre el integer, fallo mío a la hora de consultar mis notas sobre los tipos.
Perdón por no haber dejado claro el fallo. Lo que sucede es que cuando ejecuto el programa principal, cuando el usuario ingresa un número mayor que el máximo de un integer no sale del repeat a pesar de que los tipos utilizados son Int64 (ya los he cambiado) y si no voy mal deberían de poder admitir un número mayor. ¿Quizá sea porque el procedure Val no admite int64? Aunque de lo siguiente (extraído del help de delphi), entiendo que sí ya que Int64 es un tipo de dato entero ¿no? Cita:
|
#4
|
||||
|
||||
Y por que no utilizas la funcion TryStrToInt de la unidad SysUtils para hacer la conversion: ejemplo:
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#5
|
|||
|
|||
Gracias, ¡me ha sido muy útil!
No conocía esa función y hace exactamente lo mismo que la que estaba intentando hacer yo y encima ya viene implementada jeje Gracias por vuestro tiempo ^^ |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema al validar DBEdit con ADOQuery | mgp2401 | Conexión con bases de datos | 1 | 08-01-2010 16:12:39 |
extraer valores enteros desde un reg varchar y guardarlos en reg enteros | Gabichu | SQL | 0 | 12-08-2008 18:44:36 |
problema al validar fecha | sargento elias | Conexión con bases de datos | 11 | 09-04-2008 20:10:02 |
Problema al validar fecha | lbidi | Varios | 1 | 15-08-2005 22:44:55 |
problema al validar un TField | Er_Manué | Conexión con bases de datos | 2 | 26-11-2004 17:10:01 |
|