Discussion:
Get FANTÔME
(trop ancien pour répondre)
c***@gmail.com
2015-12-17 20:24:55 UTC
Permalink
J'ai un programme , que voici , qui crée tout seul un GET FANTÔME !!

Je dis fantôme car lorsqu'on execute le programme , il crée une espéce de saut de ligne !

Pourquoi ??


with Ada.text_io ; use Ada.text_io ;
with globales; use globales; -- fichier contenant la variable globale = voir le code d'aprés

Procedure reseau_neurones is

function get_name return String
is begin
Put("Your name?");
Get(nom); -- nom est une variable globale utilisée uniquement dans ce programme
return String;
end get_name;
begin
put(nom);
end reseau_neurones;


package globales
is
nom : String(1..20) ;
end globales;
Jeffrey R. Carter
2015-12-17 21:06:53 UTC
Permalink
Post by c***@gmail.com
with Ada.text_io ; use Ada.text_io ;
with globales; use globales; -- fichier contenant la variable globale = voir le code d'aprés
Procedure reseau_neurones is
function get_name return String
is begin
Put("Your name?");
Get(nom); -- nom est une variable globale utilisée uniquement dans ce programme
return String;
Cette ligne ne compile pas.
Post by c***@gmail.com
end get_name;
Get_Name n'est jamais appelé.
Post by c***@gmail.com
begin
put(nom);
end reseau_neurones;
package globales
is
nom : String(1..20) ;
end globales;
Donc, ce programme (après correction) est équivalent à

with Ada.Text_IO;

procedure Reseau_Neurones is
Nom : String (1 .. 20);
begin
Ada.Text_IO.Put (Item => Nom);
end Reseau_Neurones;

Nom contient de "stack junk".
--
Jeff Carter
"C++ is like giving an AK-47 to a monk, shooting him
full of crack and letting him loose in a mall and
expecting him to balance your checking account
'when he has the time.'"
Drew Olbrich
52
c***@gmail.com
2015-12-17 23:03:40 UTC
Permalink
Étrange que ça ne compile pas sur ton systeme .
J'utilise Gnat 4.6 avec ubuntu et ça se compile .

@Jeff Carter = Comme tu l'a démontré , on peut simplifier le code avec une procedure.

Néanmoins , l'intéret c'était d'utiliser une fonction qui utilise =

procedure Get (Item : out String);

Et justement quand on l'utilise dans la fonction , il se produit un " get fantôme " .

Aussi,je n'ai pas compris = " Nom contient de "stack junk". "

Edit= Je te remercie au passage , pour tes réponses :) .
J-P. Rosen
2015-12-17 23:08:33 UTC
Permalink
Post by c***@gmail.com
Néanmoins , l'intéret c'était d'utiliser une fonction qui utilise =
procedure Get (Item : out String);
Et justement quand on l'utilise dans la fonction , il se produit un " get fantôme " .
La procédure Get lit la chaîne /en entier/. Comme nom fait 20
caractères, elle redemande des caractères jusqu'à ce que tu en aies tapé
20. Si tu veux t'arréter à la première fin de ligne, il faut utiliser
Get_Line.
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr
c***@gmail.com
2015-12-18 00:23:29 UTC
Permalink
@J-P. Rosen = Pas du tout . J'explique =

Quand je lance le programme un get ( une sorte de skipline ) se lance trés rapidement ( - de 1 sesonde ) et donc je n'ai pas le temps d'entrer quoi que ce soit !
Le temps que je le fasse , le programme a fini de s'éxécuter :(

Bon , mis à part ce phénoméne , est-ce que quelqu'un à déjà réussi à uitiliser la procedure que j'ai mentionné dans une fonction ?
Si Oui , comment ??

Merci .
c***@gmail.com
2015-12-18 03:33:24 UTC
Permalink
J'ai compris !!

Si une ligne vide est affiché c'est parce que la fonction est ignorée .
Donc , put affiche la valeur de "nom" , qui est une chaine de caractéres vide !

En sachant cela , il faut rendre visble la fonction au programme en l'appelant .

Le code Fonctionnel =

with Ada.text_io ; use Ada.text_io ;
with globales; use globales;

Procedure reseau_neurones is

function get_name return String
is begin
Put_line("Your name?");
Get(nom);
return nom;
end get_name;
begin
nom := get_name;
put(nom);
end reseau_neurones;

Merci pour vos réponses @Jeff Carter et @J-P. Rosen :)

Continuer la lecture sur narkive:
Loading...