2017-07-14 13 views
1

入力値を返すための次のスクリプトを取得できません。私はARMとJohn Barnesの本を調べましたが、無駄です。理論的にはうまくいくはずです。 誰でも知っている理由は?私はニュービーだから、Barnesの本とARMはおそらくあまりにも進んでいる。Ada、発生したCONSTRAINT_ERROR: 'Value:'の入力が正しくありません。

with Ada.Text_IO; 
use Ada.Text_IO; 
procedure ron is 
A : Character; 

begin 
    Put_Line ("Hi Ron, how are you?"); 
     A := Character'Value (Get_Line); 
    Put_Line ("So you feel" & 
     Character'Image (A)); 
end ron; 

--TERMINAL OUTPUT 
[email protected] ~/Desktop $ gnatmake -gnat2012 ron.adb 
--gcc-4.8 -c -gnat2012 ron.adb 
--gnatbind -x ron.ali 
--gnatlink ron.ali 
[email protected] ~/Desktop $ ./ron 
--Hi Ron, how are you? 
--well. 

--raised CONSTRAINT_ERROR : bad input for 'Value: "well." 
+1

値は*文字列です*、* *文字に収まりません。 –

+0

あなたはプログラムが何をプリントアウトすると思いましたか?私は、あなたが「気持ちがいいよ」と思っていました。 –

答えて

2

あなたはLRMで見れば、あなたはAda.Text_IO.Get_LineStringを返すことがわかります。

with Ada.Text_IO; 

procedure Ron is 
begin 
    Ada.Text_IO.Put_Line ("Hi Ron, how are you?"); 

    declare 
     Reply : constant String := Ada.Text_IO.Get_Line; 
    begin 
     Ada.Text_IO.Put_Line ("So you feel " & Reply & "?"); 
    end; 
end Ron; 
1

プログラムの問題は、文字の配列を1文字にすることです。代わりにA : Characterを使用するの、

with Ada.Strings.Unbounded; 
... 
A : Ada.Strings.Unbounded.Unbounded_String; 

入力はいくつかの特定の文字列に制限されないように、私は、無制限の文字列の使用を示唆し

type Character_Array_T (1 .. 10) of Character; 
...  
A : Character_Array_T; 

のような配列型のものを定義したり、使用してみてくださいあなたの意図が何度か入力を読み上げることであるならば、長さ。 Adaタイプstringでは、文字列の長さを指定する必要があります。この長さは、文字列に含める文字数とまったく同じです。

参照のためにWiki, unbounded stringsおよびUnbounded string handlingを参照してください。

関連する問題