Foros del Web » Programación para mayores de 30 ;) » C/C++ »

valida numero de caracteres ingresados en c++

Estas en el tema de valida numero de caracteres ingresados en c++ en el foro de C/C++ en Foros del Web. Buenas a todos, necesito realizar un pequeño algoritmo para calcular la edad de una persona, el algoritmo lo tengo hecho, pero lo que quiero es ...
  #1 (permalink)  
Antiguo 26/05/2010, 09:58
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
De acuerdo valida numero de caracteres ingresados en c++

Buenas a todos, necesito realizar un pequeño algoritmo para calcular la edad de una persona, el algoritmo lo tengo hecho, pero lo que quiero es validar que en el momento de ingresar la fecha actual, por ejemplo el año actual, el usuario ingrese 4 numeros como tal, o por ejemplo que ingrese dos numeros pertenecientes al mes, y no mas de dos numeros...
yo he definido variables con su tamaño asi;:
añoactual[4];
mesactual[2];

pero me gustaria que si el usuario ingresa mayor cantidad de caracteres, se pida nuevamente el dato..

esto se puede hacer en c++?? como se hace??

envio la parte de codigo donde pido los datos de fecha actual, solo tengo validado que no ingresen numeros negativos..

Código:
void main(){
	int opc;
   	cout<<"\nINGRESANDO FECHA ACTUAL";
    do
    {
	cout<<"\nDigite el Ano actual: ";
	cin>>aano;
   }
   while (aano<=0);

   do
  {
	cout<<"\nDigite el mes actual: ";
	cin>>ames;
   }
   while ((ames <=0) || (ames>12)) ;

  do
  {
	cout<<"\nDigite el dia actual: ";
	cin>>adia;
  while ((adia<=0) || (adia>31));
  }
Agradezco de antemano me puedan ayuadar o indicar en donde puedo encontrar informacion para este tipo de validaciones..
  #2 (permalink)  
Antiguo 26/05/2010, 11:32
 
Fecha de Ingreso: mayo-2010
Mensajes: 14
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: valida numero de caracteres ingresados en c++

Se me ocurren dos formas asi rapidas:

1º - Pasar el entero "aano" a string y con el metodo "length" contar el numero de caracteres. Si es distinto que 4, esta mal.

2º - Si no te aclaras pasando el entero a string, puedes hacer una funcion recursiva que revuelva el numero de "digitos" haciendo que divida el numero entre 10. Si el resultado es mayor que 9, sumas 1 al numero de digitos y vuelves a llamar a la funcion con el resultado. De esta formas, tendras que por ejemplo:

1000/10=100 (digitos++)
100/10 = 10 (digitos++)
10/10 = 1 (digitos++)

digitos = 3


Espero que te sirvan de ayuda.
Un saludo
  #3 (permalink)  
Antiguo 26/05/2010, 16:31
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: valida numero de caracteres ingresados en c++

Gracias por tu respuesta, del primer modo me parece mejor,
  #4 (permalink)  
Antiguo 07/07/2011, 10:45
 
Fecha de Ingreso: abril-2011
Mensajes: 5
Antigüedad: 13 años
Puntos: 0
Información Respuesta: valida numero de caracteres ingresados en c++

#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;

int main(int argc, char *argv[])
{
int entero,i;
float resto;
do{
system("CLS");
printf("Ingrese un numero entero con 3 digitos ");
scanf("%d",&entero);
resto=entero/pow(10,2);//dividimos el entero entre a la potencia de 10 elevado a la cantidad de digitos que deseamos como máximo, para este caso 3, es decir, 3-1=2
}while(!((resto>=1)&&(resto<10)));//cuando el resultado de la división anterior está en entre 1 y 10 para 3 digitos, 10 y 100 para 4 digitos, 100 y 1000 ara 5 digitos y asi sucesivamente
system("PAUSE"); //entonces quiere decir que la cantidad que el usuario introdujo tiene la cantidad de digitos correcta, por lo tanto negamos el resultado de las condiciones
return EXIT_SUCCESS; //para que se repita el bucle cada que la situación no se dé
}

//El programa esta hecho en wxdevcpp
  #5 (permalink)  
Antiguo 07/07/2011, 10:54
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: valida numero de caracteres ingresados en c++

Es mas facil fijarte si el año esta entre 1000 y 9999 con un condicional if o en el while.
Asi no tenemos nada mas extra.
  #6 (permalink)  
Antiguo 07/07/2011, 15:16
 
Fecha de Ingreso: abril-2011
Mensajes: 5
Antigüedad: 13 años
Puntos: 0
Información Respuesta: valida numero de caracteres ingresados en c++

Mira te dejo una funcion validadora de cantidad de caracteres que io mismo diseñé, espero que le sirva a todos los que vean el foro.

//******************************************
//=====================================
bool validarCantidadDigitos(int d, float cant){
bool v=false;
if((d==1)&&(cant==0)) v=true;
int unidades=1;
float validador=0;
for(int i=1;i<d;i++)
unidades*=10;
validador=cant/unidades;
if((validador>=1)&&(validador<10)) v=true;
return (v);
}
//=====================================
//******************************************
  #7 (permalink)  
Antiguo 07/07/2011, 15:18
 
Fecha de Ingreso: abril-2011
Mensajes: 5
Antigüedad: 13 años
Puntos: 0
Información Respuesta: valida numero de caracteres ingresados en c++

Si aun no quedas claro como funciona te dejo el programa completo de ejemplo para que lo pruebes

//****************************
//--------------------------------------------
#include <cstdlib>
#include <iostream>

using namespace std;
bool validarCantidadDigitos(int d, float cant);
int main(int argc, char *argv[])
{
int dig;
int cantidad;
printf("cuantos digitos deberia tener la cantidad ");
scanf("%d",&dig);
printf("cual es la cantidad ");
scanf("%d",&cantidad);
if(validarCantidadDigitos(dig, cantidad))
printf("correcto\n\n");
else
printf("incorrecto\n\n");
system("PAUSE");
return EXIT_SUCCESS;
}
bool validarCantidadDigitos(int d, float cant){
bool v=false;
if((d==1)&&(cant==0)) v=true;
int unidades=1;
float validador=0;
for(int i=1;i<d;i++)
unidades*=10;
validador=cant/unidades;
if((validador>=1)&&(validador<10)) v=true;
return (v);
}
//------------------------------------------------------------------
//******************************************


Etiquetas: caracteres, numero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:10.