duda c++

Iniciado por ankora45, 10 Octubre 2012, 20:43 PM

0 Miembros y 1 Visitante están viendo este tema.

ankora45

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 (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
    int num;
    cout<<"escribe un numero"<<endl;
    cin>>num;
    if (num return char)
    {
        cout<<"no ha escrito un numero"<<endl;
    }
    else
    {
        cout<<num<<endl;
    }
}
Hay dos cosas infinitas en este mundo, el universo y la estupidez humana, y de la primera no estoy muy seguro

x64core

Cita de: 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 (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
    int num;
    cout<<"escribe un numero"<<endl;
    cin>>num;
    if (num return char)
    {
        cout<<"no ha escrito un numero"<<endl;
    }
    else
    {
        cout<<num<<endl;
    }
}


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++.

rir3760

#2
Cita de: ankora45 en 10 Octubre 2012, 20:43 PMno 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 (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <string>
using std::string;

#include <sstream>
using std::stringstream;

int main()
{
   bool ok;
   
   do {
      cout << "Introduce un numero:" << endl;
      string linea;
      getline (cin, linea);
     
      stringstream aux;
      aux << linea;
     
      int numero;
      if (aux >> numero) {
         cout << "El numero es " << numero << endl;
         ok = true;
      } else
         ok = false;
   } while (!ok);
   
   return 0;
}


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

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

rir3760

#3
Mensaje duplicado (Fue un "error de dedazo").
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language