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

  FORUM HardWare.fr
  Programmation
  Ada

  problème de get sur les chaines de caracteres (buffer)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème de get sur les chaines de caracteres (buffer)

n°1078994
mik983
Posté le 11-05-2005 à 10:40:58  profilanswer
 

bonjour,
 
Je voudrai savoir si il y a un moyen de vider le buffer en ada, j'ai un petit problème quand je fais une succession de get_line et get.
 
voilà un petit exemple:
 
with Text_Io,ada.Integer_text_Io,ada.Strings.Unbounded;
use Text_Io,ada.Integer_text_Io,ada.Strings.Unbounded;
 
procedure Principale is
   
   procedure Lire is
      Ch1,Ch2,ch3:String(1..100);
      nb_car1,nb_car2,nb_car3:integer:=0;
      Chx:Integer;
      Unb1,unb2,unb3:Unbounded_String:=null_unbounded_string;
   begin
      Put("chaine1:" );
      Get_Line(Ch1,Nb_Car1);
      Unb1:=To_Unbounded_String(Ch1(1..Nb_Car1));
      put(to_string(unb1));
      new_line(2);
       
      Put("choix en entier:" );
      Get(Chx);
      new_line;    
 
      Put("chaine2:" );
      Get_Line(Ch2,Nb_Car2);
      Unb2:=To_Unbounded_String(Ch2(1..Nb_Car2));
      put(to_string(unb2));
      New_Line(2);
       
      Put("chaine3:" );
      Get_Line(Ch3,Nb_Car3);
      Unb3:=To_Unbounded_String(Ch3(1..Nb_Car3));
      put(to_string(unb3));
      New_Line(2);
       
      Put("chaine1:" );Put(to_string(unb1));new_line;
      Put("chaine2:" );Put(to_string(unb2));new_line;
      put("choix:" );put(chx,0);new_line;
      Put("chaine3:" );Put(to_string(unb3));new_line;
       
   end Lire;
       
--***************************************************************************
begin
   lire;
end principale
 
J'obtient chaine1,chx mais ça saute l'instruction pour obtenir la chaine2 et après j'obtient correctement la chaine3, je pense qu'il s'agit d'un problème au niveau du buffer.
Le problème est que je voudrais aussi obtenir la chaine2.
 
Merci d'avance pour votre aide.

mood
Publicité
Posté le 11-05-2005 à 10:40:58  profilanswer
 

n°1079142
babar9160
Fan d'Ada et de Perl...
Posté le 11-05-2005 à 11:43:28  profilanswer
 

Salut... petites questions:  
(1) Peux tu m'expliquer pourquoi tu récupères des strings que tu transformes en unbounded_string ?
 
(2) As-tu réellement besoin de ces strings et unbounded string ? les Unb ne te suffiraient-elles pas ?
 
(3) J'ai fait quelques tests et avec cette version ça marche...

Code :
  1. with Text_Io,ada.Integer_text_Io,ada.Strings.Unbounded, Ada.Strings.Unbounded.Text_Io;
  2. use Text_Io,ada.Integer_text_Io,ada.Strings.Unbounded,Ada.Strings.Unbounded.Text_Io;
  3. procedure Principale is
  4.    procedure Lire is
  5.       Ch1            : String(1..100);
  6.       Chx            : Integer;
  7.       Last           : Positive;
  8.       Unb1,unb2,unb3 :Unbounded_String;
  9.    begin
  10.       Put("chaine1:" );
  11.       Unb1 := Get_Line;
  12.       Put_line(unb1);
  13.       Put("choix en entier:" );
  14.       Get_line(Ch1,Nb_car1);
  15.       New_Line;
  16.       Get(Ch1,Chx,Last);
  17.      
  18.       Put("chaine2:" );
  19.       Unb2 := Get_Line;
  20.       Put_line(unb2);
  21.       Put("chaine3:" );
  22.       Unb3 := Get_Line;
  23.       Put_line(unb3);
  24.       Put("chaine1:" );Put_Line(Unb1);
  25.       Put("chaine2:" );Put_line(unb2);
  26.       put("choix:" );put(chx,0);new_line;
  27.       Put("chaine3:" );Put_line(unb3);
  28.    end Lire;
  29. --***************************************************************************
  30. begin
  31.    lire;
  32. end Principale;


Dis moi ce que t'en pense ;)


Message édité par babar9160 le 11-05-2005 à 11:45:21
n°1080380
mik983
Posté le 11-05-2005 à 23:23:10  profilanswer
 

(1) Peux tu m'expliquer pourquoi tu récupères des strings que tu transformes en unbounded_string ?
Je ne connaissais pas le package ada.strings.unbounded.text_io; :-)
 
(2) As-tu réellement besoin de ces strings et unbounded string ? les Unb ne te suffiraient-elles pas ?
Non, maintenant avec ce package j'ai plus besoin de passer par des strings.Les Unb suffissent.
 
(3) J'ai fait quelques tests et avec cette version ça marche...
Merci beaucoup pour l'aide.
 
Par contre à quoi correspond le type des paramètres dans le get de la ligne 19?
Voilà ce que j'ai trouvé. Est ce que c'est ça?
procedure Get(From : in String; Item : out Num; Last : out Positive);
 
 
@+ et bonne continuation

n°1080506
babar9160
Fan d'Ada et de Perl...
Posté le 12-05-2005 à 08:53:37  profilanswer
 

Oui, c'est bien cette fonction que j'ai utilisé...
Euh par contre pour te dire exactement a quoi correspond le dernier paramètre, je ne sais pas vraiment.  
Son type, "Positive" se déduit tès facilement, c'est un entier positif... donc 0<=n qui est différent d'un "Natural" 0<N.
 
Les deux autres sont simples : String, ça tu connais...
et Num qui est déclaré comme ça, si je ne m'abuse
 
type Num is range <>;
 
Je ne m'avance pas trop en te disant que c'est un type interne au package qui correspond juste a un Integer ;)
 
En fait, j'ai un peu triché, en demandant que l'utilisateur saisisse non pas un entier directement, mais plutôt une chaine de caractère contenant cet entier... ce qui permet en fait de capter aussi le retour à la ligne - "get_line(String,Integer)" - et donc de laisser un buffer vide. Voilà...
 
Ah oui une petite astuce.. dans ton code original il y avait des new_line un peu partout.
en Ada si tu veux avoir un saut à la ligne dans l'affichage il y a trois manière :
- le new_line(x), pratique.
- le put_line(str).
- et l'utilisation du caractère de retour à la ligne "ASCII.LF". Il correspond à "\n" donc peut s'averer très utile. ;)
 
Sur ce, bon courage et vive Ada.


Message édité par babar9160 le 12-05-2005 à 08:58:53

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

  problème de get sur les chaines de caracteres (buffer)

 

Sujets relatifs
Problème ftpProblème JList, avec 2 affichages pour 1 selection
probleme programmation matlab[QT]Problème de repaint() sur un QLabel
Menu : problème de "scintillement".Problème php - mysql avec IIS
probleme lecture vidéoNEWBIE : Probleme de frame, header, target.
Problème avec mysql_fetch_array()Probleme de gestion des evenements claviers
Plus de sujets relatifs à : problème de get sur les chaines de caracteres (buffer)


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