Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - digimikeh

#171
He estado buscando distintas formas de convertir de int a float, char* a string, char* a int, char* a float, string a float.. o cualquier otra que se venga en mente, hay varias funciones que hacen esto:

atoi()
stoi()
to_string()
etc...

Sin embargo, me encontré con que se puede hacer cualquier tipo de conversión usando stringstream:

Código (cpp) [Seleccionar]

stringstream ss;
int numero;
string strNumero = "5";
ss << strNumero;
ss >> numero;


Hacer esto es extremadamente fácil, sin hacer un tipo de cast o invocar alguna función extra, y funciona...  La duda es, hay alguna restricción de conversión para stringstream?

Gracias.
#172
Ya esta, gracias por la explicación...
#173
Buenas.

Estoy practicando C++ en 3 equipos, dos de ellos son OSX y otro es Xubuntu Linux, comparto mi aprendizaje entre los computadores usando git, así que actualizo el código cada vez que me cambio de equipo.

El problema en concreto es que en osx, al llegar a cierta parte del programa, se cierra mostrándome el mensaje "Bus Error : 10", cosa que no sucede cuando lo compilo y lo ejecuto en linux, me da la espina que puede ser algo del compilador, en ambos ejecuto la misma sentencia para compilar:

$c++ -o programa programa.cpp

Tengo identificada la linea que me manda ese error, está relacionada con la función
strcpy();

Tengo entendido que el error se refiere a que estoy invocando o asignando un valor a un indice que no existe o que tiene un formato incorrecto.  Pero de ser así, linux también debería botarme el programa..

El programa esta aqui:

https://paste.ofcode.org/BYUkcz7MFesBRRFyXjNCGg
Linea 352 específicamente.


*** EDIT ***
----------------

indiceAlumnoSeleccionado equivale a -1 al momento de usar strcpy, y eso marca el error de Bus Error 10, es lógico!, pero, por qué en linux me lo permite?..

*** EDIT 2 **
----------------

Linux permite la ejecución pero funciona mal, bueno, ya tengo identificado el problema, pero sería bueno si alguien sabe, me pueda explicar por qué los compiladores se comportan así, mi programa tenía un error y el compilador del Linux lo omitió...
#174
Excelente amigos, gracias por la explicación...

Me ha quedado claro.
#175
Creo que tienes razon, hay algo en eso del buffer stdout....

Concretamente en el programa que estaba haciendo, hay algo asi:

Código (cpp) [Seleccionar]


void ingresarNota(){

    unsigned int opcion = 9;    
    char * asignatura = new char[16];

    cout << "Menu: " << endl;
    cout << "1- Matematicas " << endl;
    cout << "2- Historia " << endl;
    cout << "3- Ingles " << endl;
   
    cout << "Opcion (0 = Regresa al menu principal) : ";
    cin >> opcion;


    switch (opcion){

         case 0:
             cout << string(100, '\n');     //limpiar pantalla
             mostrarMenuPrincipal();
             break;

         case 1:
              strcpy (asignatura, "Matematicas");
              break;

         case 2:
              strcpy (asignatura, "Historia");
              break;

         case 3:
              strcpy (asignatura, "Ingles");
              break;


    }

    cout << endl << "Asignatura seleccionada : " << asignatura << endl;

    //otra instruccion 1
    //otra instruccion 2
    //ciclo for 3
    //ciclo for 4
}

void mostrarMenuPrincipal(){

    unsigned int opcion = 9;

    cout << "Menu Principal: " << endl;
    cout << "-----------------------" << endl;
    cout << "1- Ingrese Alumno nuevo " << endl;
    cout << "2- Seleccionar alumno " << endl;
    cout << "3- Ingrese nota" << endl;
    cout << "4- Salir" << endl;

    cout << "Opcion: ";
    cin >> opcion;

    switch (opcion){

         case 1:
              nuevoAlumno();
              break;

         case 2:
              seleccionaAlumno();
              break;

         case 3:
              ingresarNota();
              break;

         case 4:
              exit(0);

    }

}




En el codigo, cuando el programa pasa por ingresarNota() y si yo selecciono 0, lo que hace es entrar a mostrarMenuPrincipal() pero alcanza a salir de switch-case y alcanza a ejecutar la linea "cout << endl << "Asignatura seleccionada : " << asignatura << endl"  luego de eso ya no sigue ejecutando nada, es decir, la instruccion "//otra instruccion 1" ya no es ejecutada..
#176
Buenas

Cuando estamos dentro de una funcion y llamamos a otra  que pasa en la ejecucion?

Ejemplo:

Código (cpp) [Seleccionar]

Void sumar(){
     // hace una cosa 1
     // hace otra.cosa mas 2
     MostrarMenuPrincipal();
     // hace otra.cosa 3
     // hace 4

     Int valor;
     std::cout << "ingrese valor: ";
     Std::cin >> valor;

     Switch (valor){
         case 1:
               Cout << "es uno ";
               Break;
      }
}

Void MostrarMenuPrincipal(){
       // hace otras cosas 5
}


Que sucede?
1. Cuando se ejecuta la funcion sumar() va a llegar hasta la llamada a la funcion MostrarMenuPrincipal() y esperara a que esa funcion devuelva un valor o termine, por lo que la linea «hacer otra.cosa 3» no sera ejecutada al intante...

2. Cuando se ejecuta la funcion sumar() va a llegar hasta la llamada a la funcion MostrarMenuPrincipal() y al instante continuara paralelamente ejecutando ambas funciones....

Les pregunto esto ya que en un programa de practica que realice ayer me paso algo extraño, cuando la funcion que llamaba dentro de otra tenia un menu y una interaccion con el usuario mediante cin, la ejecucion de la funcion anterior (en este caso.sumar() ) no se ejecutaba mas quedaba bloqueada por la llamada a la nueva funcion, sin embargo, si esta nueva funcion no.tenia cin, la ejecutaba y luego volvia a la funcion anterior..

#177
Ya esta, acabo de entender como funciona...
Si el objeto cin intenta guardar un valor tipo entero y yo le paso un flotante, el siguiente objeto cin será omitido..

En mi caso, el "cin >> respuesta" no estaba siendo leído porque el ingreso del cin anterior guardaba el ingreso como int, pero yo le estaba ingresando float mientras lo ejecutaba... es decir, la matriz TablaAsigNotas es de tipo INT, y en consola yo ponía valores flotantes...

Curiosa la forma en como trabaja el flujo de entrada con el buffer..

Gracias de todas formas..
#178


Hola!, no me hace lógica ver que "cin >> respuesta", el programa al llegar a esa instancia pasa de largo como si nada..

Bajo qué circunstancias pasan estas omisiones ?

Saludos y gracias..



Ya esta, acabo de entender como funciona...
Si el objeto cin intenta guardar un valor tipo entero y yo le paso un flotante, el siguiente objeto cin será omitido..

En mi caso, el "cin >> respuesta" no estaba siendo leído porque el ingreso del cin anterior guardaba el ingreso como int, pero yo le estaba ingresando float mientras lo ejecutaba... es decir, la matriz TablaAsigNotas es de tipo INT, y en consola yo ponía valores flotantes...

Curiosa la forma en como trabaja el flujo de entrada con el buffer..

Gracias de todas formas..

MOD: Imagen adaptada a lo permitido. No hacer doble post. Usa el botón modificar.
#179
Programación C/C++ / Re: Ayuda C++
6 Enero 2019, 22:26 PM
No es necesario el espacio de nombre, te arroja alguna advertencia en tiempo de edición ?..

Puedes colgar el código para revisarlo?..

Saludos.
#180
Programación C/C++ / Re: Ayuda C++
6 Enero 2019, 17:33 PM
Hola, con qué IDE estas trabajando y que intentas hacer?....
saludos.