¿Cómo puedo obtener el historial de entrada del usuario en C?

Tengo una calculadora simple que me permite seguir ingresando números nuevos y arroja una cantidad de ganancias. Pero me gustaría poder usar la tecla de flecha (arriba) para obtener la última entrada.

Tengo esto:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// ------------------------------------------------

int main (int argCount, char *argv[]) {
    float 
        shares = atof(argv[1]),
        price = atof(argv[2]),

        // Commission fees
        fee = 4.95,

        // Total price paid (counts buy + sell commission)
        base = (price * shares) + (fee * 2),
        profit;

    printf("TOTAL BUY: %.3f\n", base);

    /**
     * Catch the input and calculate the 
     * gain based on the new input.
     */
    char sell[32];

    while (1) {
        printf(": ");
        fflush(stdout);
        fgets(sell, sizeof(sell), stdin);

        profit = (atof(sell) * shares) - base;
        printf(": %.3f", profit);

        // Show [DOWN] if the estimate is negative
        if (profit < 0)
            printf("\33[31m [DOWN]\33[0m\n");

        // Show [UP] if the estimate is positive
        else printf("\33[32m [UP]\33[0m\n");
    }

    return 0;
}

ACTUALIZACIÓN: La respuesta está abajo.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include <readline/readline.h>
#include <readline/history.h>

// ------------------------------------------------

int main (int argCount, char *argv[]) {
    float 
        shares = atof(argv[1]),
        price = atof(argv[2]),

        // Commission fees
        fee = 4.95,

        // Total price paid
        base = (price * shares) + (fee * 2),
        profit;

    printf("TOTAL BUY: %.3f\n", base);

    /**
     * Catch the users input and calculate the 
     * gain based on the new input.
     *
     * This makes it easy for active traders or
     * investors to calculate a proposed gain.
     */
    char* input, prompt[100];

    for(;;) {
        rl_bind_key('\t', rl_complete);
        snprintf(prompt, sizeof(prompt), ": ");

        if (!(input = readline(prompt)))
            break;

        add_history(input);

        profit = (atof(input) * shares) - base;
        printf(": %.3f", profit);

        // Show [DOWN] if the estimate is negative
        if (profit < 0)
            printf("\33[31m [DOWN]\33[0m\n");

        // Show [UP] if the estimate is positive
        else printf("\33[32m [UP]\33[0m\n");
        free(input);
    }

    return 0;
}

preguntado el 29 de julio de 12 a las 16:07

2 Respuestas

Puede utilizar el Biblioteca de GNU readline, que proporciona edición de línea e historial de comandos. Aquí es la página de inicio del proyecto. Parece ser lo que quieres.

Respondido 29 Jul 12, 16:07

Tendrías que usar algo como readline para agregar esa funcionalidad de forma nativa a su aplicación. La mayoría de la gente, sin embargo, solo usa envoltura.

$ rlwrap your_prog

Respondido 29 Jul 12, 16:07

Genial, lo usaré en el futuro. ¡Gracias! - Talasan Nicholson

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.