Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ankora45 en 10 Octubre 2012, 20:43 pm



Título: duda c++
Publicado por: ankora45 en 10 Octubre 2012, 20:43 pm
no se como hacer para que si un int te retorne char te devuelva un error en vez de un buffer overflow
esto es lo que tengo ya se que os puede parecer una aberracion pero no se me ocurre otra cosa
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int num;
  8.    cout<<"escribe un numero"<<endl;
  9.    cin>>num;
  10.    if (num return char)
  11.    {
  12.        cout<<"no ha escrito un numero"<<endl;
  13.    }
  14.    else
  15.    {
  16.        cout<<num<<endl;
  17.    }
  18. }
  19.  


Título: Re: duda c++
Publicado por: x64core en 10 Octubre 2012, 21:50 pm
no se como hacer para que si un int te retorne char te devuelva un error en vez de un buffer overflow
esto es lo que tengo ya se que os puede parecer una aberracion pero no se me ocurre otra cosa
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int num;
  8.    cout<<"escribe un numero"<<endl;
  9.    cin>>num;
  10.    if (num return char)
  11.    {
  12.        cout<<"no ha escrito un numero"<<endl;
  13.    }
  14.    else
  15.    {
  16.        cout<<num<<endl;
  17.    }
  18. }
  19.  

estas guardando la entrada en un int y luego ese int lo queres convertir en char?
porque no haces un casting?

char a = (char)num;

el compilador segurmante te lanzara un warning de perdida de datos y es normal , pero si estas seguro que solo ingresara un byte, noseria mejor pasar directamente el char? pero si es un numero de mas de 2 cifras entonces tendras que convertir el numero y
copiarlo en un buffer, osea convertir cada cifra del numero a un char en C++.


Título: Re: duda c++
Publicado por: rir3760 en 11 Octubre 2012, 03:15 am
no se como hacer para que si un int te retorne char te devuelva un error en vez de un buffer overflow
Tienes que explicarte de una forma clara y precisa porque, honestamente, es difícil entender el problema.

Supongo la pregunta es: Si en un programa espero obtener un entero y en su lugar el usuario teclea una cadena no valida como "JKL", ¿Como puede detectarlo y continuar con la ejecución del programa?

Si es eso puedes primero leer una linea mediante la función "getline" y a continuación verificar si de esta se puede obtener el numero mediante un objeto de la clase "stringstream".

Un ejemplo:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <string>
  7. using std::string;
  8.  
  9. #include <sstream>
  10. using std::stringstream;
  11.  
  12. int main()
  13. {
  14.   bool ok;
  15.  
  16.   do {
  17.      cout << "Introduce un numero:" << endl;
  18.      string linea;
  19.      getline (cin, linea);
  20.  
  21.      stringstream aux;
  22.      aux << linea;
  23.  
  24.      int numero;
  25.      if (aux >> numero) {
  26.         cout << "El numero es " << numero << endl;
  27.         ok = true;
  28.      } else
  29.         ok = false;
  30.   } while (!ok);
  31.  
  32.   return 0;
  33. }

Editado: la explicacion estaba mal (muy mal). La cambie por una, espero, mejor.

Un saludo


Título: Re: duda c++
Publicado por: rir3760 en 11 Octubre 2012, 16:27 pm
Mensaje duplicado (Fue un "error de dedazo").