Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2400 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  Ignorer un Get si aucune valeur entré

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ignorer un Get si aucune valeur entré

n°2114840
Sauliwx
Posté le 05-12-2011 à 11:38:05  profilanswer
 

Bonjour, je fait actuellement un programme en ada et j'aimerais qu'un de mes Get_Immediate soit ignoré si je ne tape pas la bonne touche (ici un 'a').
 
 
Exemple :  
 
début de mon programme;
Get_Immediate (X);
if X = 'a' then
   faire ce que je veux;
end if;
suite de mon programme;
 
Je veux que si je ne tape rien ou une autre touche que 'a', je passe directement a la suite de mon programme.
 
 
J'ai vu sur internet quelque chose avec des TASK mais je n'ai pas tout compris.
 
Merci pour vos futures réponses.

mood
Publicité
Posté le 05-12-2011 à 11:38:05  profilanswer
 

n°2114857
Profil sup​primé
Posté le 05-12-2011 à 13:08:40  answer
 

Bonjour,
 
Voici un code qui te permet de poursuivre le traitement à défaut de l'exécution d'un get, mais le get sera de toute manière engager jusqu'à ce qu'un caractère soit entré.
 

Code :
  1. with Text_Io;
  2. use Text_Io;
  3. procedure Main is
  4.  
  5.   task type Process_Type is
  6.   end Process_Type;
  7.  
  8.   task type Console_Type is
  9.      entry Send(Char : out Character);
  10.   end Console_Type;
  11.  
  12.   task body Console_Type is
  13.      The_Char : Character;
  14.   begin
  15.      Get_Immediate(The_Char);
  16.      accept Send(Char : out Character) do
  17.         Char := The_Char;
  18.      end Send;
  19.   end Console_Type;
  20.  
  21.   task body Process_Type is
  22.  
  23.      Console : Console_Type;
  24.      Char : Character;
  25.   begin
  26.      select
  27.         Console.Send(Char);
  28.         -- travailler avec le Char
  29.      or
  30.         delay 2.0;
  31.         -- ou faire autre chose.
  32.      end select;
  33.      Put_line("Suite du process" );
  34.  
  35.   end Process_Type;
  36.  
  37.   My_Process : Process_Type;
  38. begin
  39.  
  40.   null;
  41. end Main;


Message édité par Profil supprimé le 05-12-2011 à 13:24:49
n°2114997
Sauliwx
Posté le 05-12-2011 à 18:50:27  profilanswer
 

Merci beaucoup.  
Par contre, j'ai mis le SELECT dans une boucle et du coup quand je lance mon prog, il tourne, puis je tape la touche, il fait l'action désirée, puis il s’arrête.
C'est du a la boucle ou autre chose ?

n°2115042
Profil sup​primé
Posté le 06-12-2011 à 07:16:14  answer
 

Comme ça, je peux pas te dire, il faudrait que tu montre le reste de ton code.


Message édité par Profil supprimé le 06-12-2011 à 07:16:41
n°2115045
Profil sup​primé
Posté le 06-12-2011 à 07:58:16  answer
 

Si tu souhaite saisir plusieurs caractères, je te propose ce code, qui réserve un caractère, ici nul, qui, en boucle est renvoyé si rien n'est saisi et travaille avec le caractère saisie dans le cas contraire.
 

Code :
  1. with Text_Io;
  2. use Text_Io;
  3. procedure Main is
  4.  
  5.   task type Process_Type is
  6.      entry Get_Char(The_Char : out Character);
  7.   end Process_Type;
  8.  
  9.   task type Console_Type is
  10.      entry Send(Char : out Character);
  11.   end Console_Type;
  12.  
  13.   task body Console_Type is
  14.      The_Char : Character;
  15.   begin
  16.      loop
  17.         Get_Immediate(The_Char);
  18.         accept Send(Char : out Character) do
  19.            Char := The_Char;
  20.         end Send;
  21.      end loop;
  22.   end Console_Type;
  23.  
  24.   task body Process_Type is
  25.  
  26.      Console : Console_Type;
  27.      Char : Character;
  28.   begin
  29.      loop
  30.         select
  31.            Console.Send(Char);
  32.            accept Get_Char(The_Char : out Character) do
  33.               The_Char := Char;
  34.            end Get_Char;
  35.         or
  36.            delay 2.0;
  37.            accept Get_Char(The_Char : out Character) do
  38.               The_Char := Character'Val(0);
  39.            end Get_Char;
  40.         end select;
  41.      end loop;
  42.   end Process_Type;
  43.  
  44.   My_Process : Process_Type;
  45.   Char : Character;
  46. begin
  47.  
  48.   loop
  49.      My_Process.Get_Char(Char);
  50.      if char /= Character'Val(0) then
  51.  
  52.         Put_Line("travailler avec le char" );
  53.      else
  54.  
  55.         Put_Line("travailler sans le char" );
  56.      end if;
  57.   end loop;
  58. end Main;


Message édité par Profil supprimé le 06-12-2011 à 08:01:17
n°2115179
Sauliwx
Posté le 06-12-2011 à 16:21:53  profilanswer
 

Ok, et bien merci beaucoup pour tout ça, ça m'aide beaucoup !

n°2115205
Profil sup​primé
Posté le 06-12-2011 à 19:00:48  answer
 

Avec plaisir.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  Ignorer un Get si aucune valeur entré

 

Sujets relatifs
Calcul de la valeur actuelle avec VBARand() me renvoit une fois sur deux la même valeur
[Graphe] Affecter une même valeur au nœuds reliés par un cheminretour de valeur en c
[PHP/MYSQL] comment connaitre la valeur d'un id autoincrementSécurité d'un système de points avec une valeur monétaire
[RESOLU] JQuery appel ajax, récuperer la valeur d'une selectboxRécupérer valeur d'un select en fonction de son id
[RESOLU] En bash, curl avec du POST et plusieurs variable GETrecréer un tableau après modification d'une valeur
Plus de sujets relatifs à : Ignorer un Get si aucune valeur entré


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR