SoloCodigo
		Programación General => C/C++ => Mensaje iniciado por: patitu78 en Sábado 15 de Junio de 2002, 19:39
		
			
			- 
				hola quisiera saber como validar entrada de datos. Necesito validar números con coma flotante, pensé en convertir una cadena leida con atof y luego utilizar isdigit, pero se me complica, quisiera saber si existe una función que te diga si una cadena es un float o no?
			
- 
				/*Hola a todos, leyendo el mensaje de este amigo 
 me he puesto manos  a la obra en lo que podria ser una solucion.
 El problema es que te dice  si es o no un float
 pero la funcion que te convierte el tipo cadena de caracteres a un float no funciona no se porqué,
 asi que expongo a continuacion el codigo fuente
 y espero que te sirva de ayuda aunque no es una sola funcion predefinida.
 Y tb os invito a descubrir que es lo que falla en la conversion TCadena a float.
 Suerte;)
 
 */
 
 /*Realizado por LamKros*/
 
 #include <iostream.h>
 #include <stdlib.h>
 
 const int MAXCAD = 20;
 const char FINCAD = char(0);
 const char CERO = '0';
 const char NUEVE = '9';
 const char PUNTO = '.';
 
 typedef char TCadena[MAXCAD+1];
 
 //Comprueba que la cadena de caracteres corresponde a un nº en coma flotante
 bool esComaFlotante(TCadena d);
 //Convierte a numero en coma flotante (CONVertir To(2) Coma Flotante)
 float Conv2CF(TCadena d);
 //Realiza la potencia de un numero
 float Potencia(int num, int indice);
 
 int main()
 {TCadena dato;
 bool fin=false;
 int sal;
 float resultado;
 
 while (!(fin))
 {
 system("cls");
 cout << "Introduce un numero en coma flotante: ";
 cin >> dato;
 if (esComaFlotante(dato))
 {
 cout <<endl <<"Numero en coma flotante"<<endl;
 //resultado = Conv2CF(dato);
 //cout << "El numero es" <<resultado;
 }
 else
 {cout <<endl <<"Numero incorrecto"<<endl;}
 system("PAUSE");
 cout <<endl<< " Pulsa 1 para continuar. ";
 cin >> sal;
 if(sal!=1)
 {fin = true;}
 }
 return 0;
 
 }
 
 bool esComaFlotante(TCadena d)
 {bool r1=false,r2=false;
 int i=0;
 while ((d>=CERO)&&(d<=NUEVE)&&(i<MAXCAD))
 {++i;}
 if ((d==PUNTO)&&(d[i+1]!=FINCAD)&&(i>0))
 {r1=true;}
 else
 {r1=false;}
 ++i;
 while ((d>=CERO)&&(d<=NUEVE)&&(i<MAXCAD))
 {++i;}
 if ((i>=MAXCAD)||(d==FINCAD))
 {r2=true;}
 else
 {r2=false;}
 return (r1 && r2);
 }
 
 float Conv2CF(TCadena d)
 {
 int i=0,j=0;
 float num=0;
 if (esComaFlotante(d))
 {
 while ((d[j]!=PUNTO)&&(j<MAXCAD))
 {++j;}
 while ((d!=FINCAD)&&(i<MAXCAD))
 {
 num = num + (int(d[j])-int(CERO))* Potencia(10,j); }
 i=i+1;
 j=j-1;
 }
 return num;
 }
 
 float Potencia(int num, int indice)
 {int i;
 float res=1;
 if (indice>=0)
 {
 for(i=0;i<=indice;++i)
 {res = res * num;}
 }
 else
 {
 for(i=0;i>indice;--i)
 {res = res / num;}
 }
 return res;
 }
 
 //Esto es todo, animo;)