Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Xtrangr en 2 Septiembre 2017, 01:22 am



Título: Duda con menu de opciones
Publicado por: Xtrangr en 2 Septiembre 2017, 01:22 am
Hola que tal, estoy programando una calculadora como para empezar con este lenguaje. El menu de opciones lo estoy haciendo con un do while y luego con switch tengo un menu de opciones del 1 al 9 dentro del do while, mi problema es que necesito que al ingresar el primer numero, el menu ser cargue con el valor que ingrese como por ejemplo
1-Ingrese un numero (X)
Cuando ingreso un numero por ejemplo 5 el menu deberia iterar otra vez con el nuevo numero quedando asi
1-Ingrese un numero (5)
No se me ocurre como hacer esto, si necesitan algo más no duden en preguntarme.


Título: Re: Duda con menu de opciones
Publicado por: ivancea96 en 2 Septiembre 2017, 01:41 am
Intuyo que lo que quieres es editar lo que ya hay escrito en la consola.
Si es así, y si estás empezando en el lenguaje, te diría que pases de esto. Es más "problemático" de lo que parece.
Sinceramente, pasa de esto. Tendrás que usar una librería o la API del sistema operativo (librería windows.h en caso de windows) para hacerlo.
Si igualmente quieres hacerlo, aquí el primer comentario ya pone un código para hacerlo: https://stackoverflow.com/questions/27337481/how-to-change-a-character-in-c-console-that-was-printed-to-the-screen-earlier (https://stackoverflow.com/questions/27337481/how-to-change-a-character-in-c-console-that-was-printed-to-the-screen-earlier)


Título: Re: Duda con menu de opciones
Publicado por: Xtrangr en 2 Septiembre 2017, 01:54 am
Intuyo que lo que quieres es editar lo que ya hay escrito en la consola.
Si es así, y si estás empezando en el lenguaje, te diría que pases de esto. Es más "problemático" de lo que parece.
Sinceramente, pasa de esto. Tendrás que usar una librería o la API del sistema operativo (librería windows.h en caso de windows) para hacerlo.
Si igualmente quieres hacerlo, aquí el primer comentario ya pone un código para hacerlo: https://stackoverflow.com/questions/27337481/how-to-change-a-character-in-c-console-that-was-printed-to-the-screen-earlier (https://stackoverflow.com/questions/27337481/how-to-change-a-character-in-c-console-that-was-printed-to-the-screen-earlier)
Me falto aclarar que estoy programando en C, ese codigo tambien funciona en c?
y puede ser que con un flag? se pueda hacer porque creo que vi por ahi, pero no termine de entender


Título: Re: Duda con menu de opciones
Publicado por: ivancea96 en 2 Septiembre 2017, 01:57 am
El código de la respuesta, sí, sirve en C. Incluyendo la librería <windows.h>

Tendrás que explicar lo de hacerlo con una "flag". Eso es un concepto genérico que no dice mucho en este caso.


Título: Re: Duda con menu de opciones
Publicado por: Xtrangr en 2 Septiembre 2017, 02:47 am
El código de la respuesta, sí, sirve en C. Incluyendo la librería <windows.h>

Tendrás que explicar lo de hacerlo con una "flag". Eso es un concepto genérico que no dice mucho en este caso.
Algo asi como poner un if y una bandera. Si se ingreso el numero a entra al if y cambias a por %d, me dijeron eso pero no lo entiendo.


Título: Re: Duda con menu de opciones
Publicado por: ivancea96 en 2 Septiembre 2017, 13:04 pm
Mm haz una cosa. Escríbeme qué es lo que quieres que ocurra exactamente. El mensaje con el número "(5)", quieres que aparezca después de escribir el número, debajo, o quieres que reemplace el número de arriba?

Código:
1-Ingrese un numero (X)
5
1-Ingrese un numero (5)
...
A esto último es a lo que supongo que se refiere el que te dijo eso.


Título: Re: Duda con menu de opciones
Publicado por: Xtrangr en 2 Septiembre 2017, 20:13 pm
Compilo el programa sale esto en la consola(obviando todas las variables y demas para no confundirte más):
         
Código:
        printf("1- Ingresar primer numero (A)\n");
        printf("2- Ingresar segundo operando (B)\n");
        printf("3- Calcular la suma (A+B)\n");
        printf("4- Calcular la resta (A-B)\n");
        printf("5- Calcular la division (A/B)\n");
        printf("6- Calcular la multiplicacion (A*B)\n");
        printf("7- Calcular el factorial (A!)\n");
        printf("8- Calcular todas las operacione\n");
        printf("9- Salir\n");

        scanf("%d",&opcion);


Escribo 1 así eligo la opcion numero 1 que es la de ingresar el primer número, luego escribo un 5.
Ahora lo que quiero que haga el programa es que me vuelva a aparecer el menu pero que en vez de que salga "1- Ingresar primer numero (A)" salga "1- Ingresar primer numero (5)" en la consola, y asi con las demas opciones cuando las seleccione


Título: Re: Duda con menu de opciones
Publicado por: ivancea96 en 2 Septiembre 2017, 20:23 pm
Uhm. Tienes varias maneras.
La primera es la que supongo que te comentaron. A la hora de mostrar el menú:

Código
  1. if(numeroAIngresado){
  2.    printf("Ingresar numero (%i)", numeroA);
  3. }else{
  4.    printf("Ingresar numero (A)");
  5. }

Otra opción, para hacerlo más automático, sería:
Código
  1. char stringNumeroA[20];
  2. stringNumeroA[0] = 'A'; // Por defecto
  3. stringNumeroA[1] = '\0';
  4.  
  5. printf("Ingresar numero (%d)", stringNumeroA);
  6.  
  7. //...
  8.  
  9. // Cuando se ha ingresado A
  10. sprintf(stringNumeroA, "%d", numeroA); // Guardamos el nuevo valor en la string


Título: Re: Duda con menu de opciones
Publicado por: Xtrangr en 2 Septiembre 2017, 21:59 pm
Lo siento es que no pude deducir lo que hiciste, me harias un gran favor si lo puedes editar tu y si deseas explicarme como funciona intente copiarlo sin saber como funciona pero no me salio
Código:
int main()
{
    char seguir='s';
    int opcion=0;
    float num1;
    float num2;
    float rta;

    do
    {
        printf("1- Ingresar 1er operando (A)\n");
        printf("2- Ingresar 2do operando (B)\n");
        printf("3- Calcular la suma (A+B)\n");
        printf("4- Calcular la resta (A-B)\n");
        printf("5- Salir\n");

        scanf("%d",&opcion);

        switch(opcion)
        {
            case 1:
                printf("Ingrese el primer numero: \n");//Esto ni los demas ya no irian ya que el numero que ingreso se escribe en el mismo menu
                scanf("%f" , &num1);
                break;
            case 2:
                printf("Ingrese el segundo numero: \n");
                scanf("%f" , &num2);
                break;
            case 3:
                rta=suma( num1 , num2);
                printf("La suma es %f\n" , rta);
                break;
            case 4:
                rta=resta(num1 , num2);
                printf("La resta es %f\n" , rta);
                break;
            case 5:
                seguir = 'n';
                break;


        }
        }while(seguir=='s');
    return 0;


Título: Re: Duda con menu de opciones
Publicado por: ivancea96 en 2 Septiembre 2017, 22:02 pm
Olvídate de la segunda forma que puse.

La primera, no es más que un if. Cambias los printf que tienes por ese if. Pruebalo con el primer printf primero.

Lo único que no tienes en tu código es la variable "numeroAIngresado". Eso solo es un bool que indica, si es true, que ya se ingresó A. Basta que inicialices esa variable a false y que la pongas a true cuando haya ingresado A. El resto, está en el código que puse.


Título: Re: Duda con menu de opciones
Publicado por: Xtrangr en 2 Septiembre 2017, 22:32 pm
Lo hice asi pero esta mal, no se en que me estoy equivocando
Código:
int main()
{
    char seguir='s';
    int opcion=0;
    float num1;
    float rta;
    int numeroAIngresado=0;

    do
    {
        if(numeroAIngresado)
        {
        printf("1- Ingresar 1er operando (%f)\n", num1);
        numeroAIngresado=1;
        }
        else
        {
        printf("1- Ingresar 1er operando (A)\n");
        }
        printf("2- Salir\n");

        scanf("%d",&opcion);

        switch(opcion)
        {
            case 1:
                printf("Ingrese el primer numero: \n");
                scanf("%f" , &num1);
                break;

        }
        }while(seguir=='s');
    return 0;


Título: Re: Duda con menu de opciones
Publicado por: ivancea96 en 2 Septiembre 2017, 23:03 pm
:o
numeroAInresado es una flag. ¿Cuándo la pones a 1? Pues cuando se ingrese el numero. ¿Después de qué línea "num1" tiene valor?


Título: Re: Duda con menu de opciones
Publicado por: Xtrangr en 2 Septiembre 2017, 23:27 pm
Entonces la bandera tiene que ir en el case 1?


Título: Re: Duda con menu de opciones
Publicado por: ivancea96 en 2 Septiembre 2017, 23:29 pm
Ahí la pones a 1. Ahí es donde el número ah sido ingresado, ¿no? El nombre de las variables representa qué es lo que significa. Si quieres que esa variable signifique "si el número ha sido ingresado o no", haz que sea cierto.


Título: Re: Duda con menu de opciones
Publicado por: Xtrangr en 2 Septiembre 2017, 23:47 pm
num1 tiene valor en el case 1 de ahi quiero que ese valor se cargue en el menu, entonces tendria que hacer el flag en case 1
Código:
  case 1:
                scanf("%f" , &num1);
                if(numeroAIngresado)
                {
                printf("1- Ingresar 1er operando (%f)\n", num1);
                numeroAIngresado=1;
                }
                else
                {
                printf("1- Ingresar 1er operando (A)\n");
                }
                break;

No logro entender si numeroAIngresado=0, entra en el if y luego el string pasa a mostrar el valor luego cambio el valor a 1 ..... No entiendo


Título: Re: Duda con menu de opciones
Publicado por: ivancea96 en 3 Septiembre 2017, 04:03 am
Entonces la bandera tiene que ir en el case 1?
Poner la bandera a 1 en el case. Eso y nada más, solo el numeroAIngresado=1;. Es eso lo que estás indicando: que el número ha sido ingresado.
El resto, donde estaba.


Título: Re: Duda con menu de opciones
Publicado por: Xtrangr en 3 Septiembre 2017, 04:46 am
Perdón pero no lo logro entender, si me ayudas escribiendolo tu creo que se me armaria el puzzle que tengo ahora en mi cabeza


Título: Re: Duda con menu de opciones
Publicado por: ivancea96 en 3 Septiembre 2017, 13:49 pm
Lo tenías hacho. Copio tu código:
Código
  1. int main()
  2. {
  3.    char seguir='s';
  4.    int opcion=0;
  5.    float num1;
  6.    float rta;
  7.    int numeroAIngresado=0;
  8.  
  9.    do
  10.    {
  11.        if(numeroAIngresado)
  12.        {
  13.        printf("1- Ingresar 1er operando (%f)\n", num1);
  14.        numeroAIngresado=1;
  15.        }
  16.        else
  17.        {
  18.        printf("1- Ingresar 1er operando (A)\n");
  19.        }
  20.        printf("2- Salir\n");
  21.  
  22.        scanf("%d",&opcion);
  23.  
  24.        switch(opcion)
  25.        {
  26.            case 1:
  27.                printf("Ingrese el primer numero: \n");
  28.                scanf("%f" , &num1);
  29.                break;
  30.  
  31.        }
  32.        }while(seguir=='s');
  33.    return 0;
  34. }

:o
numeroAInresado es una flag. ¿Cuándo la pones a 1? Pues cuando se ingrese el numero. ¿Después de qué línea "num1" tiene valor?

Código
  1. int main()
  2. {
  3.    char seguir='s';
  4.    int opcion=0;
  5.    float num1;
  6.    float rta;
  7.    int numeroAIngresado=0;
  8.  
  9.    do
  10.    {
  11.        if(numeroAIngresado)
  12.        {
  13.        printf("1- Ingresar 1er operando (%f)\n", num1);
  14.        }
  15.        else
  16.        {
  17.        printf("1- Ingresar 1er operando (A)\n");
  18.        }
  19.        printf("2- Salir\n");
  20.  
  21.        scanf("%d",&opcion);
  22.  
  23.        switch(opcion)
  24.        {
  25.            case 1:
  26.                printf("Ingrese el primer numero: \n");
  27.                scanf("%f" , &num1);
  28.                numeroAIngresado=1;
  29.                break;
  30.  
  31.        }
  32.        }while(seguir=='s');
  33.    return 0;
  34. }


Título: Re: Duda con menu de opciones
Publicado por: Xtrangr en 3 Septiembre 2017, 15:39 pm
Ahora entiendo todo, ahora me queda mucho más claro el concepto de flag muchas gracias por tu ayuda