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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como evitar que se introduzcan valores no válidos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Como evitar que se introduzcan valores no válidos  (Leído 4,960 veces)
DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Como evitar que se introduzcan valores no válidos
« Respuesta #10 en: 17 Mayo 2013, 15:28 pm »

Para mi que lo que el quiere es impedir que le ESCRIBAN como tal en la consola (supongo que sea en la consola) lo que el dice...realmente en la consola no se como evitarlo, si haces una aplicacion windows form puedes usar un MaskTextBox o MaskEdit. Salu2s


En línea

grodomio

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Como evitar que se introduzcan valores no válidos
« Respuesta #11 en: 17 Mayo 2013, 15:39 pm »

Efectivamente, es en la consola,

os comento así por lo alto, se trata de un sistema de ayuda por consola que muestra varios bucles.

En el enunciado especifica que la variable privada de la clase sea de tipo entero.

He probado a pasar un char en vez de un int, pero sigue tragándose los caracteres no numéricos.

Voy a poner el código que llevo hasta ahora, porque ya tengo un cacao que no veas, a ver si vosotros veis el fallo.

helpclass.h

Código:
#ifndef __HELPCLASS_H__
#define __HELPCLASS_H__

class Help {
private:
int _option;
public:
Help();
int getoption();
void setoption(int option);
void showmenu();
bool helpon(char option);
bool isvalid(char option);
};

#endif

helpclass.cpp

Código:
#include "helpclass.h"
#include <iostream>
#include <cstdlib> //Para system()
#include <cstdio>

using namespace std;

Help::Help() {
setoption(1);
}

int Help::getoption() {
return _option;
}

void Help::setoption(int option) {
_option = option;
}

void Help::showmenu() {
cout << endl << "Sistema de ayuda en modo texto en la consola" << endl << endl;
cout << "0.- Se mostrara la ultima ayuda" << endl;
cout << "1.- if" << endl;
cout << "2.- switch" << endl;
cout << "3.- for" << endl;
cout << "4.- while" << endl;
cout << "5.- do-while" << endl;
cout << "6.- Salir del programa" << endl << endl;
}

bool Help::helpon(char option) {
setoption(option);
switch(option) {
case '0': option = getoption();
break;
case '1': cout << endl << "Bucle if" << endl << endl;
cout << "    if(condition)" << endl;
cout << "    {" << endl;
cout << "        statements;" << endl;
cout << "    }" << endl << endl << endl;
break;
case '2': cout << endl << "Bucle switch" << endl << endl;
cout << "    switch(expression)" << endl;
cout << "    {" << endl;
cout << "        case constant-expression:" << endl;
cout << "            statements;" << endl;
cout << "            break; //optional" << endl;
cout << "        case constant-expression:" << endl;
cout << "            statements;" << endl;
cout << "            break; //optional" << endl << endl;
cout << "        // you can have any number of case statements." << endl;
    cout << "        default : //Optional" << endl;
cout << "            statements;" << endl;
cout << "    }" << endl << endl;
break;
case '3': cout << endl << "Bucle for" << endl << endl;
cout << "    for(init; condition; increment)" << endl;
cout << "    {" << endl;
cout << "        statements;" << endl;
cout << "    }" << endl << endl;
break;
case '4': cout << endl << "Bucle while" << endl << endl;
cout << "    while(condition)" << endl;
cout << "    {" << endl;
cout << "        statements;" << endl;
cout << "    }" << endl << endl;
break;
case '5': cout << endl << "Bucle do-while" << endl << endl;
cout << "    do" << endl;
cout << "    {" << endl;
cout << "        statements;" << endl;
cout << "    } while(contidion);" << endl << endl;
break;
default: return false;
}
return true;
}
/*
bool Help::isvalid(int option) {
if(option < 0 || option > 6) {
return false;
}
//No haría falta el else, porque si se cumple bucle if, sale de la funcion
//devolviendo false, si no se cumple, no entra y al final devuelve true;
return true;
}*/
bool Help::isvalid(char option) {
if(option >= '0' || option <= '6') {
cout << "TRUE" << endl;
getchar();
getchar();
return true;
}
//No haría falta el else, porque si se cumple bucle if, sale de la funcion
//devolviendo false, si no se cumple, no entra y al final devuelve true;
else {
cout << "FALSE" << endl;
getchar();
getchar();
return false;
}
}

y el helpmain.cpp

Código:
#include "helpclass.h"
#include <iostream>
#include <cstdlib> //Para system()
#include <cstdio> //Para getchar();

using namespace std;

int main() {
Help h;
char option;
bool continuar = true;

do {
system("clear");
option = h.getoption();
cout << option << endl; //borrar
h.showmenu();
cout << "Introduce opcion: ";
cin >> option;

if(h.isvalid(option)) {
system("clear");
continuar = h.helpon(option);
cout << "Pulsa ENTER para continuar ...";
getchar();
getchar();
}
else {
cout << "Por favor, introduzca valor valido" << endl;
}
} while(continuar);


return 0;
}

Gracias y un saludo.


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Como evitar que se introduzcan valores no válidos
« Respuesta #12 en: 18 Mayo 2013, 01:18 am »

Sólo se me ha ocurrido un sistema para evitar los caracteres no numéricos, dejando option como int en todo el sistema de archivos. Mezcla funciones usuales en C pero que las comparte el C++ y lo mejor de todo es que el sistema funciona. Por cierto, fíjate que yo uso "cls" para limpiar la pantalla, posiblemente tengas que cambiarlos a clear, están en el primer fichero:

helpmain.cpp

Código
  1. #include "helpclass.h"
  2. #include <iostream>
  3. #include <cstdlib> //Para system()
  4. #include <cstdio> //Para getchar();
  5.  
  6. using namespace std;
  7.  
  8. int main() {
  9. Help h;
  10. char ch;
  11. int option,cont;
  12. bool continuar = true;
  13.  
  14. do {
  15. system("cls");
  16. option = h.getoption();
  17. cout << option << endl; //borrar
  18. h.showmenu();
  19.        do{
  20.            cont=0;
  21.            cout << "Introduce opcion de 0 a 6: ";
  22.            cont=scanf("%d",&option);
  23.            while( (ch = getchar()) != '\n' );
  24.        }while(cont==0);
  25. if(h.isvalid(option)) {
  26. system("cls");
  27. continuar = h.helpon(option);
  28. cout << "Pulsa ENTER para continuar ...";
  29. getchar();
  30. getchar();
  31. }
  32. else {
  33. cout << "Por favor, introduzca valor valido" << endl;
  34. }
  35. } while(continuar);
  36.  
  37.  
  38. return 0;
  39. }
  40.  

helpclass.cpp

Código
  1. #include "helpclass.h"
  2. #include <iostream>
  3. #include <cstdlib> //Para system()
  4. #include <cstdio>
  5.  
  6. using namespace std;
  7.  
  8. Help::Help() {
  9. setoption(1);
  10. }
  11.  
  12. int Help::getoption() {
  13. return _option;
  14. }
  15.  
  16. void Help::setoption(int option) {
  17. _option = option;
  18. }
  19.  
  20. void Help::showmenu() {
  21. cout << endl << "Sistema de ayuda en modo texto en la consola" << endl << endl;
  22. cout << "0.- Se mostrara la ultima ayuda" << endl;
  23. cout << "1.- if" << endl;
  24. cout << "2.- switch" << endl;
  25. cout << "3.- for" << endl;
  26. cout << "4.- while" << endl;
  27. cout << "5.- do-while" << endl;
  28. cout << "6.- Salir del programa" << endl << endl;
  29. }
  30.  
  31. bool Help::helpon(int option) {
  32. setoption(option);
  33. switch(option) {
  34. case 0: option = getoption();
  35. break;
  36. case 1: cout << endl << "Bucle if" << endl << endl;
  37. cout << "    if(condition)" << endl;
  38. cout << "    {" << endl;
  39. cout << "        statements;" << endl;
  40. cout << "    }" << endl << endl << endl;
  41. break;
  42. case 2:  cout << endl << "Bucle switch" << endl << endl;
  43. cout << "    switch(expression)" << endl;
  44. cout << "    {" << endl;
  45. cout << "        case constant-expression:" << endl;
  46. cout << "            statements;" << endl;
  47. cout << "            break; //optional" << endl;
  48. cout << "        case constant-expression:" << endl;
  49. cout << "            statements;" << endl;
  50. cout << "            break; //optional" << endl << endl;
  51. cout << "        // you can have any number of case statements." << endl;
  52.     cout << "        default : //Optional" << endl;
  53. cout << "            statements;" << endl;
  54. cout << "    }" << endl << endl;
  55. break;
  56. case 3: cout << endl << "Bucle for" << endl << endl;
  57. cout << "    for(init; condition; increment)" << endl;
  58. cout << "    {" << endl;
  59. cout << "        statements;" << endl;
  60. cout << "    }" << endl << endl;
  61. break;
  62. case 4: cout << endl << "Bucle while" << endl << endl;
  63. cout << "    while(condition)" << endl;
  64. cout << "    {" << endl;
  65. cout << "        statements;" << endl;
  66. cout << "    }" << endl << endl;
  67. break;
  68. case 5: cout << endl << "Bucle do-while" << endl << endl;
  69. cout << "    do" << endl;
  70. cout << "    {" << endl;
  71. cout << "        statements;" << endl;
  72. cout << "    } while(contidion);" << endl << endl;
  73. break;
  74. default: return false;
  75. }
  76. return true;
  77. }
  78.  
  79. bool Help::isvalid(int option) {
  80. if(option < 0 || option > 6) {
  81. return false;
  82. }
  83. //No haría falta el else, porque si se cumple bucle if, sale de la funcion
  84. //devolviendo false, si no se cumple, no entra y al final devuelve true;
  85. return true;
  86. }
  87.  
  88.  

helpclass.h

Código
  1. #ifndef __HELPCLASS_H__
  2. #define __HELPCLASS_H__
  3.  
  4. class Help {
  5. private:
  6. int _option;
  7. public:
  8. Help();
  9. int getoption();
  10. void setoption(int option);
  11. void showmenu();
  12. bool helpon(int option);
  13. bool isvalid(int option);
  14. };
  15.  
  16. #endif

Como ves el cambio es muy sutil en el primer fichero, pero cumple con su cometido. Pruébalo y ya me diras.

Saluditos!. ....
« Última modificación: 18 Mayo 2013, 01:22 am por leosansan » En línea

grodomio

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Como evitar que se introduzcan valores no válidos
« Respuesta #13 en: 21 Mayo 2013, 12:04 pm »

Gracias, la verdad es que funciona, se lo he enviado al profesor a ver si acepta funciones de C en estas prácticas de C++.

Gracias a todos.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines