Notizia:
  • Rilasciata Ubuntu 14.04 LTS Trusty Tahr. Per ottenerla, visitate questa pagina oppure visualizzate la dimostrazione.
  • È uscito il numero 26 della Newsletter italiana di Ubuntu. Lo trovate a questo indirizzo.
  • È uscito il numero 80 di Full Circle Magazine in italiano. Lo trovate a questo indirizzo.

C e ncurses

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

C e ncurses

Messaggioda [paZx] » lunedì 17 ottobre 2005, 19:07

Ciao a tutti,
sto cercando di fare un programmino in C con le librerie ncurses. Il codice del mio programma è:

Codice: Seleziona tutto
#include <stdio.h>
#include <ncurses.h>
#include <signal.h>

int check_keys(void);

main(int argc, char *argv[])
   {

      /* Dati ’non-ncurses’ */
      int key=0, finestra, finestra2;
      int dato1=0, dato2=0;
      bool first=false;

      
      /* Inizializzazioni ncurses */
      (void) initscr();    /* inizializza la libreria curses */
      keypad(stdscr, TRUE);    /* abilita la mappatura della tastiera */
      (void) nonl();     /* non convertire NL->CR/NL in output */
      (void) cbreak();    /* prende i caratteri in input uno alla volta, senza attendere il \n */
      (void) noecho();    /* nessuna echo dell’input */
           (void) nodelay(stdscr, true);   
      
      /* Colori per ncurses */
      start_color();   
      init_pair(1, COLOR_WHITE, COLOR_BLACK);
      init_pair(2, COLOR_GREEN, COLOR_GREEN);
      init_pair(3, COLOR_WHITE, COLOR_BLUE);
      init_pair(4, COLOR_CYAN, COLOR_CYAN);
      init_pair(5, COLOR_WHITE, COLOR_WHITE);
      init_pair(6, COLOR_MAGENTA, COLOR_MAGENTA);
      init_pair(7, COLOR_BLUE, COLOR_BLUE);
      init_pair(8, COLOR_YELLOW, COLOR_YELLOW);

      /* Colora lo sfondo della pagina */
      bkgd(COLOR_PAIR(3));
      mvprintw(11,2,"Dato 1:");   // Stampa il commento del dato 1
      mvprintw(21,2,"Dato 2:");   // Stampa il commento del dato 2
      refresh();
          
      
      for(;;) {
         
         /* Crea la finestra per il primo dato */
         finestra=newwin(3,16,10,20);
         wbkgd(finestra,COLOR_PAIR(3));
         box(finestra,ACS_VLINE,ACS_HLINE);   // Bordi della finestra         
         mvwprintw(finestra,1,2,"%d",dato1);   // Stampa il dato nella finestra
         
         /* Crea la finestra per il secondo dato */
         finestra2=newwin(3,16,20,20);
         wbkgd(finestra2,COLOR_PAIR(3));
         box(finestra2,ACS_VLINE,ACS_HLINE);   // Bordi della finestra         
         mvwprintw(finestra2,1,2,"%d",dato2);   // Stampa il dato nella finestra
   
         if((key=getch())==KEY_EXIT)
            break;
         
         else if((key=getch())==ERR) {
            
            
            
            if(first==false){
               wrefresh(finestra2);
               first=true;
            }

            if(dato1<10000){
               dato1++;
               wrefresh(finestra);
               }
            else {
               dato2++;
               dato1=0;
               wrefresh(finestra);
               wrefresh(finestra2);
               }
      
            }      
         }
      
      delwin(finestra);
      delwin(finestra2);
      endwin();
   
}


Il problema è che premendo Esc non termina l'applicazione.. qualcuno riesce a darmi una mano?  ???

Grazie
Avatar utente
[paZx] Non specificato
Prode Principiante
 
Messaggi: 90
Iscrizione: febbraio 2005

Re: C e ncurses

Messaggioda pierba » martedì 18 ottobre 2005, 8:00

Hai installato i compilatori? Di default non vengono installati; devi aggiungere i pacchetti build-essential e libncurses5-dev.


ciao
Pietro pagina personale - Avete domande sul forum? Leggendo le FAQ: potreste trovare la risposta.
La conoscenza deve essere collettiva, quindi, come da regolamento (Sez. II punto 15) i messaggi personali contententi richieste di assistenza tecnica verranno ignorati.
Avatar utente
pierba Non specificato
Tenace Tecnocrate
Tenace Tecnocrate
 
Messaggi: 14531
Iscrizione: febbraio 2005

Re: C e ncurses

Messaggioda [paZx] » martedì 18 ottobre 2005, 8:09

Ho tutto il necessario, infatti a parte qualche warning compila tutto, ma in esecuzione non esce dal programma come mi apsetto.. anzi non ne esce proprio, se premo Esc si ferma l'incremento di dato1 per 1 secondo e poi ricomincia. Per fermare l'applicazione devo usare Ctrl+c ma questo impedisce la corretta chiusura di finestre varie e mi riame tutto in memoria causando problemi vari.

Ciao
Avatar utente
[paZx] Non specificato
Prode Principiante
 
Messaggi: 90
Iscrizione: febbraio 2005

Re: C e ncurses

Messaggioda NuSYS » martedì 18 ottobre 2005, 12:44

Per prima cosa stampa l'output dell'int key.
Vedi che valore ti restituisce...
Avatar utente
NuSYS Non specificato
Prode Principiante
 
Messaggi: 177
Iscrizione: marzo 2005

Re: C e ncurses

Messaggioda [paZx] » martedì 18 ottobre 2005, 20:50

NuSYS ha scritto:Per prima cosa stampa l'output dell'int key.
Vedi che valore ti restituisce...


Infatti.. il tasto Esc corrisponde all'int 27 e non all'int 551 di KEY_EXIT.
A questo punto mi chiedo a cosa corrispondono i valori dei vari KEY_ in ncurses.h.. googlerò un pò.

Grazie NuSYS
Avatar utente
[paZx] Non specificato
Prode Principiante
 
Messaggi: 90
Iscrizione: febbraio 2005


Torna a Programmazione

Chi c’è in linea

Visualizzano questa sezione: Claudio_F e 5 ospiti