Ignorer un Get si aucune valeur entré

Ignorer un Get si aucune valeur entré - Ada - Programmation

Marsh Posté le 05-12-2011 à 11:38:05    

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.

Reply

Marsh Posté le 05-12-2011 à 11:38:05   

Reply

Marsh Posté le 05-12-2011 à 13:08:40    

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
Reply

Marsh Posté le 05-12-2011 à 18:50:27    

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 ?

Reply

Marsh Posté le 06-12-2011 à 07:16:14    

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
Reply

Marsh Posté le 06-12-2011 à 07:58:16    

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
Reply

Marsh Posté le 06-12-2011 à 16:21:53    

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

Reply

Marsh Posté le 06-12-2011 à 19:00:48    

Avec plaisir.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed