elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  validacion de cadenas en c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: validacion de cadenas en c++  (Leído 2,823 veces)
d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
validacion de cadenas en c++
« en: 13 Abril 2014, 15:13 pm »

hola a todos tengo que hacer mi proyecto final en estructura de datos pero tengo que validar entradas, en c++ se puede comprobando la cadena despues del enter, pero yo quiero hacerlo caracter por caracter casi lo logro, lo unico es que no puedo borrar un caracter presionando backspace, porque solo tengo comprendidas las teclas del abecedario y espacio y las envio a una funcion para que las guarde en un arreglo alguien me puede ayudar aqui esta el codigo


Código
  1. #include<conio.h>
  2. #include<iostream.h>
  3. #include<stdio.h>
  4. #include<string.h>
  5.  
  6. char bufletras[25];
  7. int contletras=0;
  8. int num, lon;
  9.  
  10. char emite(int numero){
  11.  bufletras[contletras]=numero;
  12.  contletras+1;
  13.  
  14.   return *bufletras;
  15. }
  16. main(){
  17.  
  18. cout<<"Escriba su nombre: ";
  19.   do{
  20.   num=getch();
  21. if(num>='a' && num<='z')
  22.      {cout<<emite(num);}
  23.   else if(num>='A' && num<='Z')
  24.     { cout<<emite(num);}
  25.   else if(num==0x20)//space
  26. {cout<<emite(num);}
  27.    //else if(num==0x8)  //de la tecla backspace
  28.  
  29.   }while(num!=13); //enter
  30. }


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: validacion de cadenas en c++
« Respuesta #1 en: 13 Abril 2014, 22:29 pm »

"Borrar" sería retroceder un caracter, imprimir un espacio y volver a retroceder un caracter. Había una función llamada gotoxy que sirvia para moverte a una posición x,y de la consola.

Pero no entiendo porque te complicas tanto, lo que estas haciendo es mucho más oscuro y peor que el sistema estandar.


« Última modificación: 13 Abril 2014, 22:31 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: validacion de cadenas en c++
« Respuesta #2 en: 14 Abril 2014, 08:43 am »

No se, no termino de ver tu sistema:

* ¿Te has planteado cómo validar "números"? En el caso de números en coma flotante vas a tener en cuenta la precisión decimal o conviertes sin más ? el resultado no va a ser el mismo.

* ¿ Y qué va a suceder con el comando de "pegar" de la consola ?

Utilizar un sistema "normal" de entrada de datos suele dar menos problemas:

* El sistema está sobradamente probado, por lo que aseguras su funcionamiento.

* Es lo que espera un usuario estándar, por lo que tendrá menos problemas para usarlo.

* Dar un mensaje de error suele ser más explicativo que no dejar que se introduzca un carácter.

* Puedes dar una cobertura más uniforme a lenguajes no contemplados por la tabla ASCII

De hecho, la inmensa mayoría de las aplicaciones en modo consola ( incluso aquellas que tienen una "interfaz gráfica" emulada desde la consola ) te permiten introducir cualquier cosa y te la validan al pulsar el enter o al "cambiar" de input.
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: validacion de cadenas en c++
« Respuesta #3 en: 14 Abril 2014, 11:21 am »

Eferion lo ha explicado perfecto solo tengo que añadir un punto más:

* El programa es portable y puede compilarse en otras plataformas/SO sin dificultad.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: validacion de cadenas en c++
« Respuesta #4 en: 14 Abril 2014, 19:08 pm »

Sólo unos pequeños detalles previos:

* <iostream> sin el .h

* <cstring> sin el .h

* <cstdio> sin el .h

* main es int y como tal ha de tener su correspondiente return.

* contletras+1 no hace nada, sólo suma 1 a contletraspero no lo almacena en el mismo.

Esto último hace que la flauta haya sonado ya que *buffer siempre apuntará al primer caracter de la cadena buffer y como contletras siempre es cero, ya que no se incrementa, pues da la casualidad de que siempre apuntará al último caracter introducido y el código aparenta funcionar bien.

Pero supongamos que te has dado cuenta y que corriges la expresión contletras+1  por la correcta de contletras++, ¡horror!, ahora sólo sale el primer caracter que escribes, intentas meter leosansan y en pantalla sólo aparece lllllllllll. Curioso que al corregir un error nos demos cuenta del otro error, el de que el return ahora si funciona y como el contador se incrementa el return devuelve lo que tiene que devolver: el primer caracter.

Don´t worry, be happy!, eso se resuelve haciendo que el return de la función emite devuelva justo el último caracter.

Y para hacerlo bien, lo primero es colocar contletras++ donde debe ir: al comienzo dela función e inicializandolo a -1, porque si lo dejas donde está el return devolvería un valor más allá de donde has llegado a llenar el array bufletras y eso no estaría bien, no no.

Ahora funciona O.K:

Código
  1. #include<conio.h>
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5.  
  6. using namespace std;
  7.  
  8. char bufletras[25];
  9. int contletras=-1;
  10. int num, lon;
  11.  
  12. char emite(int numero){
  13.  contletras++;
  14.  bufletras[contletras]=numero;
  15.  return bufletras[contletras];
  16. }
  17. int main(){
  18.  
  19. cout<<"Escriba su nombre: "<<endl;
  20.  do{
  21.  num=getch();
  22. if(num>='a' && num<='z')
  23.      cout<<emite(num);
  24.   else if(num>='A' && num<='Z')
  25.     cout<<emite(num);
  26.   else if(num==0x20)//space
  27.    cout<<emite(num);
  28.    else if(num==0x8)  //de la tecla backspace
  29.      contletras--;
  30.   }while(num!=13); //enter
  31.   cout<< endl<<"Este es su nombre: "<<bufletras;
  32.   return 0;
  33. }

Creo que esto responde a tu otro tema del por qué sólo te imprime en pantalla el primer caracter que introduces pareciendo que getch no hace su función de vaciar su contenido en cada llamada a la misma.

De todas formas, y por si acaso, si la única finalidad de la función era pasar num a char bastaba con usar:


Código
  1. char emite(int numero){
  2.  
  3.   return numero;
  4. }

EDITO: Y ya puestos te activo el backspace para eliminar un caracter introducido por error de la cadena final, que no de la pantalla ya que para ello tendría que hacer uso de gotoxy y no sé si es lo que quieres.:

Código
  1. else if(num==0x8) //de la tecla backspace
  2.  contletras--;

Bueno por si acaso si lo quieras y suponiendo que tu conio.h tiene activada la opcion gotoxy, si no prueba con la conio2.h. Ahora corrige hasta lo que se ve en la pantalla:

Código
  1. else if(num==0x8) { //de la tecla backspace
  2.  gotoxy(contletras+1,2);
  3.  contletras--;
  4. }

o su equivalente en windows.h:

Código
  1. .................
  2. #include <windows.h>
  3. ........................
  4. int gotoxy(int x, int y);
  5. ................................
  6.    else if(num==0x8) { //de la tecla backspace
  7.      gotoxy (contletras,1);
  8.      contletras--;
  9.    }
  10. return 0;
  11. }
  12.  
  13. int gotoxy(int x, int y)
  14. {
  15.   COORD coord;
  16.   HANDLE h_stdout;
  17.   coord.X = x;
  18.   coord.Y = y;
  19.   if ((h_stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
  20.      return 0;
  21.   if (SetConsoleCursorPosition(h_stdout, coord) == 0)
  22.      return 0;
  23.   return 1;
  24. }



¡¡¡¡ Saluditos! ..... !!!!


« Última modificación: 15 Abril 2014, 04:35 am por leosansan » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
validacion de datos
Programación Visual Basic
tony12 1 1,698 Último mensaje 18 Febrero 2006, 19:08 pm
por zhidow
Validacion de cadenas C++
Programación C/C++
Gabiita 3 4,531 Último mensaje 7 Septiembre 2010, 06:50 am
por Gabiita
validacion de xp
Windows
marceguille 2 2,278 Último mensaje 26 Febrero 2012, 08:23 am
por Randomize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines