C/Visual C - validar datos

 
Vista:

validar datos

Publicado por virgo (44 intervenciones) el 10/04/2006 17:59:03
hola muy buenas, necesito validar datos y nunca hecho una validacion, puede alguein darme un ejemplo segun mis datos?
void pedir_datosc(cliente *datos_cliente)
{
printf("introduce el dni: "); // 8 digitos y 1 letra sino error
scanf("%s", datos_cliente->dni);
printf("introduce el nombre: "); //solo letras
scanf("%s", datos_cliente->nombre);
printf("introduce el primer apellido: "); //solo letras
scanf("%s", datos_cliente->apellido1);
printf("Introduce el segundo apellido: "); //solo letras
scanf("%s", datos_cliente->apellido2);
printf("Introduce la poblacion: "); // solo letras
scanf("%s", datos_cliente->poblacion);
printf("Introduce la provincia: "); //solo letras
scanf("%s", datos_cliente->provincia);
printf("Introduce el telefono: "); //letras y numeros
scanf("%s", datos_cliente->telefono);
printf("Introduce la edad: "); //numeros
scanf("%d", &datos_cliente->edad);
printf("Introduce el saldo: "); //numeros
scanf("%f", &datos_cliente->saldo);
}
void pedir_datosa(aeropuerto *datos_aeropuerto)
{
printf("introduce el codigo: "); ///solo numeros
scanf("%d", datos_aeropuerto->codigoa);
printf("introduce el nombre: ");
scanf("%s", datos_aeropuerto->nombre);
printf("introduce el numero de pistas: ");
scanf("%d", datos_aeropuerto->pistas);
printf("Introduce si tiene parking o no (0/1): "); //solo 0 /1
scanf("%d", datos_aeropuerto->parking);
printf("Introduce el codigo de la ciudad: ");
scanf("%d", datos_aeropuerto->codigoc);
}

Cristina_sola56@hotmail.com
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 datos

Publicado por marcos (63 intervenciones) el 10/04/2006 20:46:05
ya te pase algo (lo vites?)
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 datos

Publicado por fernando.gomez (1604 intervenciones) el 10/04/2006 21:09:20
Cris,

para validar si un caracter es numerico, emplea isdigit. Para validar que contenga letras, emplea isalpha. Para obtener la longitud de una cadena de texto emplea strlen o wstrlen.

Saludos.
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 datos

Publicado por Cris (44 intervenciones) el 10/04/2006 21:26:13
podrias hacerme un ejemplo segun mis datos?Ademas tengo 38 errores en el codigo. Puedes mirarlo si te lo paso?
void pedir_datosa(aeropuerto *datos_aeropuerto)
{
printf("introduce el codigo: ");
scanf("%d", datos_aeropuerto->codigoa);
printf("introduce el nombre: ");
scanf("%s", datos_aeropuerto->nombre);
printf("introduce el numero de pistas: ");
scanf("%d", datos_aeropuerto->pistas);
printf("Introduce si tiene parking o no (0/1): ");
scanf("%d", datos_aeropuerto->parking);
printf("Introduce el codigo de la ciudad: ");
scanf("%d", datos_aeropuerto->codigoc);
}

void pedir_datosc(cliente *datos_cliente)
{
printf("introduce el dni: ");
scanf("%s", datos_cliente->dni);
printf("introduce el nombre: ");
scanf("%s", datos_cliente->nombre);
printf("introduce el primer apellido: ");
scanf("%s", datos_cliente->apellido1);
printf("Introduce el segundo apellido: ");
scanf("%s", datos_cliente->apellido2);
printf("Introduce la poblacion: ");
scanf("%s", datos_cliente->poblacion);
printf("Introduce la provincia: ");
scanf("%s", datos_cliente->provincia);
printf("Introduce el telefono: ");
scanf("%s", datos_cliente->telefono);
printf("Introduce la edad: ");
scanf("%d", &datos_cliente->edad);
printf("Introduce el saldo: ");
scanf("%f", &datos_cliente->saldo);
}
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 datos

Publicado por ISAIAS DUQUE (46 intervenciones) el 10/04/2006 23:15:43
yo no se mucho de C, pero parece que se te olvido colocar el ampersson & en unas lineas, por cierto que significa eso -> ( es trabajar con memoria dinamica)?
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 datos

Publicado por Nelek (818 intervenciones) el 11/04/2006 13:26:55
si no me equivoco es porque esta trabajando con clases distintas. El -> lo que hace es acceder al subapartado que se necesita en cada momento a traves de un puntero. Seria el equivalente a hacer: var = nombre_struct.subapartado_x

Solo que en c++ o vc++ al trabajar con clases distintas puedes elegir entre crear un objeto derivado de esa clase y acceder directamente con el "." o crear un puntero que apunte a la clase elegida y usar el "->"

Por ejemplo yo estoy ahora con un proyecto en VC++ y cuando quiero acceder a algun metodo o variable publica de la clase CDoc lo que hago es:

CFPSDoc* CFPSView::GetDocument()
{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFPSDoc)));
return (CFPSDoc*)m_pDocument;
}

pDoc->guarda_el_dato (parametro);
//o bien
pDoc->variable_publica = valor_x; //o a la inversa

Con esto lo que logro es por ejemplo grabar un dato en una variable privada de la clase CDocument, accediendo a su metodo (que es publico en el CDoc) a traves del puntero pDoc. Todo ello desde el CView que es donde se ha de hacer las cosas que interactuan con la pantalla.
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 datos

Publicado por Cris (44 intervenciones) el 11/04/2006 14:42:48
no me resolvieron los problemas.NECESITO AYUDA!!
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 datos

Publicado por Nelek (818 intervenciones) el 11/04/2006 15:51:49
Segun te dijo fernando:

Cris,

para validar si un caracter es numerico, emplea isdigit. Para validar que contenga letras, emplea isalpha. Para obtener la longitud de una cadena de texto emplea strlen o wstrlen.

Saludos.

el ejemplo que pides, a raiz de lo que te han dicho (no se si funcionara bien, pero bueno):

void pedir_datosc(cliente *datos_cliente)
{
printf("introduce el dni: "); // 8 digitos y 1 letra sino error
etiqueta_fallo1:
scanf("%s", datos_cliente->dni);
if (!valida_dni) //Si el resultado de la validacion es falso entras y si no sigues
{ printf ("El DNI introducido no es valido, por favor ingreselo de nuevo:");
goto etiqueta_fallo1;
}
.....
}

bool valida_dni ()
{ int largo = datos_cliente->dni.strlen(); //Obten el largo de tu cadena
int errores = 0; //No hay fallos
bool resultado = false; //Por defecto resultado mal

for (int i = 0; i < (largo -1); i++) //Se recorre la parte de numeros
{ //Si el char de esa posicion no es un numero, se cuenta un fallo
if (!datos_cliente->dni[i].isdigit()) { errores++; }
}

//Te vas a la ultima posicion donde esta la letra y si no es una letra se aumenta un fallo
if (!datos_cliente->dni[largo].isalpha()) { errores++; }

//La evaluacion
if (!errores) //si errores sigue siendo 0 entonces está bien
{ resultado = true;
}

//el otro caso no merece la pena considerarlo porque ya tenias el resultado a false
return resultado;
}

NOTA: no se exactamente si el strlen, isalpha... y demas metodos que te dijo fernando se usan exactamente como los he puesto yo (es decir un puntito detras de tu cadena y los dos parentesis detras) pero el algortimo para la validacion si que te sirve, lo unico que tienes que hacer es averiguar como se usa realmente esos comandos y modificar el ejemplo que te he puesto. Yo los he puesto asi por la costumbre de los otros lenguajes.

NOTA2: tambien puedes hacer que la funcion de validacion reciba un parametro del mismo tipo que lo que quieres validar y luego usarlo dentro de la funcion con otro nombre (yo lo suelo hacer asi para evitar sopresas), es decir:

bool valida_pistas (int temporal)
{ ....
if (!temporal.isdigit()) {errores++;}
....
}
//y luego llamas a la funcion:
valida_pistas (datos_aeropuerto->pistas)

//siendo equivalente al...
bool valida_pistas ()
{ ...
if (!datos_aeropuerto->pistas.isdigit()) {errores++;}
....
}

pero eso ya a tu eleccion.
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 datos

Publicado por fernando.gomez (1604 intervenciones) el 11/04/2006 17:12:35
Hola, no, isdigit, isalpha, etc, son funciones estándares de C.

if (isdigit('A')) {
cout << "Es número" << endl;
} else {
cout << "No es número" << endl;
}

Saludos.
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 datos

Publicado por Cris (44 intervenciones) el 11/04/2006 17:47:43
podrias ayudarme en la pregunta de las variables que tengo para mañana?
ya tengo toda la programacion solo me keda cambiar el valor por el neuvo
Por favor.
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 datos

Publicado por fernando.gomez (1604 intervenciones) el 11/04/2006 21:30:40
¿qué pregunta de las variables?
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 datos

Publicado por Cris (44 intervenciones) el 11/04/2006 21:35:19
ES muy urgente es para mañana
TEngo el siguiente programa:
Quiero modificar el valor de una variable especifica de un fichero,
para ello la busco hasta situarme en ella, muestro la linea por pantalla:
<FONT FACE="Comic Sans Ms" COLOR="Red" Size="9"><B><I>
De esta linea kiero modificar solo FONT FACE y para ello muestro el contenido :
COmic Sans Ms, pido al usuario la introduccion del nuevo valor
y recorro el fichero hasta posicionarme de nuevo en esa variable pero cambio el contenido
por el nuevo.
Todo esto ya esta programado, lo unico que no me sale es como hacer lo ultimo, es decir:
tipo de letra //variable a modificar
<FONT FACE="Comic Sans Ms" COLOR="Red" Size="9"><B><I> //linea donde se encuentra
Comic Sans Ms //contenido de variable
Introduce el nuevo valor: arial

<FONT FACE="arial" COLOR="Red" Size="9"><B><I> *********ESto no me sale*******

El codigo para hacer esto es:menu_texto, modificar_letra, pedir_texto, REESCRIBIR_TExTO
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

void texto::menu_texto(string line_aux)
{
int opc;
do
{
system("cls");
cout << " MENU TEXTO" << endl;
cout << "1. Tipo de letra" << endl;
cout << "2. Tamano" << endl;
cout << "3. Color" << endl;
cout << "4. Subrayado/Negrita/Cursiva" << endl;
cout << "5. Leyenda" << endl;
cout << "6. Salir" << endl;
cout << "Elije la opcion que deseas modificar el texto" << endl;

cin >> opc;

const int SIZE=2000;

char *line=new char[2000];
string copy;

copy="<FONT FACE";

ifstream in ("PaginaPrincipal1.html");

switch(opc)

{
case 1:
cout << "Tipo de Letra" << endl;

while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{
break;
}
}
cout << line << endl;
int u;
do
{
in.getline(line,SIZE);

u=0;
for(int i=0;i<copy.size();++i)
if(copy.at(i)!=line[i])
break;
else
u++;
}while(u<10);

cout << line << endl;
fflush(stdin);
cin.get();

modificar_letra(line);
pedir_texto("tipoletra",1);
reescribir_texto(line);
break;

case 2:
cout << "Tamano" << endl;
while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{
break;
}
}
cout <<line<<endl;
do
{
in.getline(line,SIZE);

u=0;
for(int i=0;i<copy.size();++i)
if(copy.at(i)!=line[i])
break;
else
u++;
}while(u<10);

cout << line << endl;
fflush(stdin);
cin.get();

modificar_letra(line);
pedir_texto("Tamano", 2);
reescribir_texto(line);

break;
case 3:
cout << "Color" << endl;
while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{

break;
}
}
cout <<line<<endl;
do
{
in.getline(line,SIZE);

u=0;
for(int i=0;i<copy.size();++i)
if(copy.at(i)!=line[i])
break;
else
u++;
}while(u<10);

cout << line << endl;
fflush(stdin);
cin.get();
modificar_letra(line);
pedir_texto("Color", 3);
reescribir_texto(line);
break;
case 4:
cout << "Subrayado" << endl;
while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{
break;
}
}
cout <<line<<endl;
do
{
in.getline(line,SIZE);

u=0;
for(int i=0;i<copy.size();++i)
if(copy.at(i)!=line[i])
break;
else
u++;
}while(u<10);

cout << line << endl;
fflush(stdin);
cin.get();
modificar_letra(line);
pedir_texto("Subrayado", 4);
reescribir_texto(line);
break;
case 5:
cout << "Leyenda" << endl;
while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{
break;
}
}
cout <<line<<endl;
do
{
in.getline(line,SIZE);

u=0;
for(int i=0;i<copy.size();++i)
if(copy.at(i)!=line[i])
break;
else
u++;
}while(u<10);
in.getline(line,SIZE);
cout << line << endl;

fflush(stdin);
cin.get();
modificar_letra(line);
pedir_texto("Leyenda", 5);
reescribir_texto(line);
break;
}
}while(opc!=6);

}

string texto::modificar_letra(string a)
{

string tipo="FACE=\"";
tipoletra="";
string b;

int i=0;
int t=0;
do{
if (a.at(i)!=tipo[t])
{
++i;
t=0;
}
else
{
++t;
++i;
}
}while (t<6);
fflush(stdin);
cin.get();

while (a.at(i)!='"')
{
b=a.at(i);
tipoletra.append(b);
++i;
}
cout <<tipoletra<<endl;
fflush(stdin);
cin.get();

//COLOR//
tipo="COLOR=\"";
string colour="";
t=0;
do{
if (a.at(i)!=tipo[t])
{
++i;
t=0;
}
else
{
++t;
++i;
}
}while (t<7);
fflush(stdin);
cin.get();

while (a.at(i)!='"')
{
b=a.at(i);
colour.append(b);
++i;
}
cout<<colour<<endl;
fflush(stdin);
cin.get();

//tamaño
tipo="Size=\"";
string tamano="";

t=0;

do{
if(a.at(i)!=tipo[t])
{
++i;
t=0;
}
else
{
++t;
++i;
}
}while (t<6);
fflush(stdin);
cin.get();

while (a.at(i)!='"')
{
b=a.at(i);
tamano.append(b);
++i;
}
cout <<tamano<<endl;
fflush(stdin);
cin.get();

// SUBRAYADO//
string subrayo="";
for(i=a.size()-1;i<a.size()-10;--i)
{
if (a.at(i)=='B' || a.at(i)=='S' || a.at(i)=='I')
{
b=a.at(i-1);
subrayo.append(b);
b=a.at(i);
subrayo.append(b);
b=a.at(i+1);
subrayo.append(b);
}
}
cout<<subrayo<<endl;
fflush(stdin);
cin.get();

return("Hola");
}

void texto::pedir_texto (string a, int b)
{
string letras;
string tamanio;
string colores;
string ley;

switch (b)
{
case 1:{
cout <<"introduce "<<a <<" nueva"<<endl;
cin>>letras;
}
break;

case 2: {
cout <<"introduce "<<a<<" nueva"<<endl;
cin>>tamanio;
}
break;

case 3: {
cout <<"introduce "<<a<<" nueva"<<endl;
cin>>colores;
}
break;

case 4: {/*
cout <<"introduce "<<a<<" nueva<<endl;
cin>>S;
*/
}
break;
case 5: {
cout <<"introduce "<<a<<" nueva"<<endl;
cin>>ley;
}
break;
}

}

void texto::reescribir_texto (string c)**************ESTO NO SE MODIFICAR LOS VALORES****
{
const int SIZE =2000;
char *line =new char [SIZE];
string line_aux;

ifstream in ("PaginaPrincipal1.html");

while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{
break;
}
}
cout<<line<<endl;
fflush(stdin);
cin.get();

string a="<FONT FACE";
int b;
do
{
in.getline(line,SIZE);
b=0;
for (int i=0; i<a.size();++i)
if (a.at(i)!=line[i])
break;
else
b++;
} while (b<10);

cout << line << endl;
fflush(stdin);
cin.get();

}
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 datos

Publicado por nelek (818 intervenciones) el 12/04/2006 07:38:20
Gracias por la corrección Fernando, mensaje recibido. En otros lenguajes que he utilizado, funciones parecidas se usaban como yo las escribi.

Cristina, espero que solo con hacer esas correcciones que ha especificado fernando en la manera de usar las funciones hayas podido usar el algoritmo que te he puesto. Yo al menos los suelo hacer asi, aunque como la mayoria de las veces, suele haber tantas maneras de hacer las cosas como programadores se pongan a hacerlas.
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