2017-07-14 63 views
1

我無法獲得以下腳本來返回我的輸入值;我查閱了ARM以及John 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_Line返回String

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

您的程序存在的問題是您嘗試將字符數組放入單個字符中。而不是使用A : Character的,試圖定義一個數組類型類似於

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

或使用

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

我建議使用無界字符串,使輸入不限定於某些特定的字符串如果你的意圖是多次讀出一個輸入,那麼這個時間就會變長。 Ada類型string要求您指定字符串長度,此長度恰好是此字符串應包含的字符數。

參見Wiki, unbounded stringsUnbounded string handling僅供參考。