Domanda

sto imparando a programmare in C e vogliono essere in grado di digitare i caratteri nel terminale, mentre il mio codice è in esecuzione senza premere tornare . Le mie opere programma, tuttavia quando chiamo initscr(), lo schermo si oscura - anche dopo aver chiamato filter(). La documentazione per filter suggerisce dovrebbe compensazione disable -. Tuttavia questo non è il caso per me

#include <stdio.h>
#include <curses.h>
#include <term.h>

int main(void) {

    int ch;

    filter();
    initscr();
    cbreak();
    noecho();
    keypad(stdscr, TRUE);

    while((ch = getch()) != EOF);

    endwin();

    return 0;
}

Perché il codice di cui sopra ancora clearr lo schermo, e che cosa si potrebbe fare per risolvere il problema?

sto usando Debian Lenny (stabile) e gnome-terminal se questo aiuta.

È stato utile?

Soluzione

Usa newterm() invece di initscr(), si dovrebbe andare bene, allora. E non dimenticare delscreen() se si segue questo consiglio.

Altri suggerimenti

L'estensione della risposta da mike.dld, questo funziona per me su MacOS X 10.6.6 (GCC 4.5.2) con il sistema di maledice biblioteca - senza cancellare lo schermo. Ho aggiunto la possibilità di registrare i caratteri digitati (registrati in un file di "x"), e la possibilità di digitare CONTROL-D e fermare il programma piuttosto che costringere l'utente a interrupt.

#include <stdio.h>
#include <curses.h>
#include <term.h>

#define CONTROL(x)  ((x) & 0x1F)

int main(void)
{
    FILE *fp = fopen("x", "w");
    if (fp == 0)
        return(-1);
    SCREEN *s = newterm(NULL, stdin, stdout);
    if (s == 0)
        return(-1);
    cbreak();
    noecho();
    keypad(stdscr, TRUE);

    int ch;
    while ((ch = getch()) != EOF && ch != CONTROL('d'))
        fprintf(fp, "%d\n", ch);

    endwin();

    return 0;
}

Si potrebbe vedere il vostro schermo cancellata in un'applicazione maledizioni per uno di questi motivi:

  • initscr (che cancella il schermo) o newterm senza prima convocazione filter , o
  • l'inizializzazione terminale cancella lo schermo (o fa apparire per cancellare, passando alla schermata alternativo).

In quest'ultimo caso, si può sopprimere la funzione di schermo si alternano in ncurses reimpostando i puntatori enter_ca_mode e exit_ca_mode NULL come fatto in dialog . Meglio ancora, scegliere una descrizione terminale che fa quello che si vuole.

Per ulteriori approfondimenti:

Fondamentalmente, curses è progettato per assumere lo schermo (o finestra, nel caso di un terminale finestra). Non si può davvero mescolare maledizioni con stdio, e non si può davvero usare maledizioni a poco input o output qualcosa senza fare confusione con il resto dello schermo. Ci sono soluzioni alternative parziali, ma non si è mai davvero di essere in grado di farlo funzionare il modo in cui suona come si desidera. Siamo spiacenti.

suggerirei o riscrivere il programma da utilizzare durante maledizioni, o indagando alternative come readline.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top