Ada,提出了CONSTRAINT_ERROR:“价值:”的糟糕输入。“

时间:2017-07-14 19:33:43

标签: ada

我无法获得以下脚本来返回我的输入值;我看过ARM以及约翰巴恩斯的书,但无济于事。理论上它应该有效。 谁知道为什么?我是新手,所以巴恩斯的书和ARM对我来说可能太先进了。

 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
--ronhans@amante ~/Desktop $ gnatmake -gnat2012 ron.adb
--gcc-4.8 -c -gnat2012 ron.adb
--gnatbind -x ron.ali
--gnatlink ron.ali
--ronhans@amante ~/Desktop $ ./ron
--Hi Ron, how are you?
--well.

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

2 个答案:

答案 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 :(得分: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作为参考。