Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/12/2007, à 00:20

Nicorider

quitter un programme en appuyant sur echap

re bonsoir,

Lorsque je quitte mon programme, je suis obliger d'appuyer sur ctrl+c j'aimerai que tout en haut du message console il soit écrit "Press à‰chap to quit" mais pour cela, il faut que j'insère dans mon programme quelques lignes qui me permette de le faire. Pouvez-vous m'aider s'il vous plaà®t ?

Merci.

Dernière modification par Nicorider (Le 09/12/2007, à 00:21)


Distribution : Ubuntu Hardy Heron 8.04
GNU/linux with 1391402 :).

Hors ligne

#2 Le 09/12/2007, à 01:47

best_friend_fr

Re : quitter un programme en appuyant sur echap

Salut

Quel langage ?
Quel genre de programme ?


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#3 Le 10/12/2007, à 16:02

LittleWhite

Re : quitter un programme en appuyant sur echap

En C :  méthode très simple :
Tu ecris "press any key" et tu fait un getchar ( mais faut appyuer sur entrée ou directement sur entrée )
pour echap je ne connais pas de méthode precise

#4 Le 10/12/2007, à 20:56

Ssmario2

Re : quitter un programme en appuyant sur echap

Salut ,
euhh en C ,vite fait voila ce que j'aurais fait big_smile .....

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<ncurses.h>
  4 
  5 #define ESC 27      /* Code ASCII de "echap" */
  6 
  7 int main()
  8 {
  9     int c;
 10     initscr();     /* entrer en mode CURSES */
 11     cbreak();      /* desactive le "line buffering" lire sans attendre le retour chariot */
 12     noecho();      /* desactive l'affichage des touches imprimable ,l'activation se 
 13                       se fait par l'appelle echo(); */
 14     keypad(stdscr, TRUE); /* pour "etendre" l'appui sur la touche echap */
 15 
 16     printw("Press Any Key ...\n");
 17     refresh();     /* Rafraichis la fenêtre afin d'afficher le message */ 
 18     do
 19     {
 20         c=getch();
 21     }while( c != ESC );
 22 
 23     endwin();       /* quitter le mode CURSES proprement */
 24     return EXIT_SUCCESS;
 25 }

En gros je t'invite à  lire la doc "ncurses" pour bien assimiler tout sa ,je débute aussi et j'éspere avoir répondu a ta question .

@++

Hors ligne

#5 Le 10/12/2007, à 21:57

Nicorider

Re : quitter un programme en appuyant sur echap

merci pour toute ses réponses, je m'attendais pas à  tant de conseils.

Donc, j'utilise le C.
J'ai fait un programme qui convertit un nombre en lettres (je sais jamais si il faut mettre un s ou un tiret ...).

et dans la phrase du début, j'ai écrit pour quitter, appuyer sur echap.

Sinon pour répondre à  Ssmario2, je trouve le programme un peu long pour l'action désirée, je pense qu'il doit y avoir quelque chose de plus simple ou de plus basique, t'en pense quoi ?

sinon j'ai jeté un oeil du cà´té de wikipedia et je suis tombé sur cette phrase : "de manière indépendante du terminal". Comme le programme est dépendant du terminal, je pense pas que se soit l'utilisation la plus appropriée.

http://fr.wikipedia.org/wiki/Ncurses

Dernière modification par Nicorider (Le 10/12/2007, à 22:05)


Distribution : Ubuntu Hardy Heron 8.04
GNU/linux with 1391402 :).

Hors ligne

#6 Le 10/12/2007, à 23:03

Link31

Re : quitter un programme en appuyant sur echap

Tu ne pourras pas détecter autre chose que l'appui de la touche entrée de manière indépendante du terminal. Il faudra soit utiliser ncurses (ou une bibliothèque quelconque), soit utiliser directement les ioctls de Linux.

En utilisant ce genre de code, ton programme ne dépendra plus de ncurses, mais il dépendra de Linux. à€ toi de voir.

#include <termios.h>
#include <unistd.h>
#include <sys/time.h>
#include <stdio.h>

void mode_raw(int activer)
{
   static struct termios cooked;
   static int raw_actif = 0;

   if (raw_actif == activer)
   {
      return;
   }

   if (activer)
   {
      struct termios raw;

      tcgetattr(STDIN_FILENO, &cooked);

      raw = cooked;
      cfmakeraw(&raw);
      tcsetattr(STDIN_FILENO, TCSANOW, &raw);

   }
   else
   {
      tcsetattr(STDIN_FILENO, TCSANOW, &cooked);
   }

   raw_actif = activer;
}

int unix_kbhit(void)
{
   struct timeval tv = { 0, 0 };
   fd_set readfds;

   FD_ZERO(&readfds);
   FD_SET(STDIN_FILENO, &readfds);

   return select(STDIN_FILENO + 1, &readfds, NULL, NULL, &tv) == 1;
}

int main()
{
        char c = 0;
        mode_raw(1);
        while (c != 27)
        {
                while (!unix_kbhit());
                c = getchar();
        }
        mode_raw(0);

        printf("%c\n", c);

        return 0;
}

Hors ligne

#7 Le 11/12/2007, à 18:42

Link31

Re : quitter un programme en appuyant sur echap

Oui, on attend avec une boucle while qu'une touche soit pressée (!unix_kbhit()), et on la récupère immédiatement après depuis le buffer avec la fonction habituelle : getchar().

Hors ligne

#8 Le 12/12/2007, à 08:39

LittleWhite

Re : quitter un programme en appuyant sur echap

Je trouve qu'utiliser la ncurses et un peu lourd mais j'y avais pensé.
Pourquoi ne peut t'on pas quitté ton programme par le très simple ^C ( Ctrl-C ) tu dit simplement au debut du programme que c'est ^C pour quitter.
Au pire si tu a des problèmes de libération de mémoire dans le sens que quitter le programme aussi rapidement ne libère pas la mémoire tu peux utilisé la fonction atexit ( man 3 atexit )
C'est une fonction auquel on lui donne un pointeur de fonction afin que cette fonction soit éxecuter à l'arret.
Par contre je ne l'aime pas beaucoup car elle n'accepte pas d'argument.

Mais je crois que je suis hors sujet car je ne réponds plus à ta question qui est de savoir comment on quitte grâce à echap.
donc je sors.