Ada- raised Constraint_error : bad input for 'Value:
Ada- raised Constraint_error : bad input for 'Value:
我正在尝试使用 Integer'Value 将字符串转换为整数。这对于通过文件的第一个循环工作正常,但之后我得到一个错误的 'value (raised Constraint_Error) 输入。我希望有人能告诉我我的方法的错误,这样我就可以转换字符串到每个循环的整数。
WITH Ada.Text_IO, Ada.Integer_Text_IO;
USE Ada.Text_IO, Ada.Integer_Text_IO;
PROCEDURE Isbntest IS
FUNCTION Strip(The_String: String; The_Characters: String)
RETURN String IS
Keep: ARRAY (Character) OF Boolean := (OTHERS => True);
Result: String(The_String'RANGE);
Last: Natural := Result'First-1;
BEGIN
FOR I IN The_Characters'Range LOOP
Keep(The_Characters(I)) := False;
END LOOP;
FOR J IN The_String'RANGE LOOP
IF Keep(The_String(J)) THEN
Last := Last+1;
Result(Last) := The_String(J);
END IF;
END LOOP;
RETURN Result(Result'First .. Last);
END Strip;
Input: File_Type := Ada.Text_IO.Standard_Input;
BEGIN
WHILE NOT End_of_File(Input) LOOP
DECLARE
Line : String := Ada.Text_IO.Get_Line(Input);
StrippedLine : String := line;
ascii_val: Integer :=0;
BEGIN
StrippedLine := Strip(Line, "-");
ascii_val := integer'value(StrippedLine);
Put(ascii_val);
Put_line(StrippedLine);
END;
END LOOP;
Close (Input);
end isbntest;
问题是您在创建数组后弄乱了数组的长度。不要那样做。
而不是
DECLARE
Line : String := Ada.Text_IO.Get_Line(Input);
StrippedLine : String := line;
BEGIN
StrippedLine := Strip(Line, "-");
声明时直接将Stripped_Line初始化为正确的大小即可。
DECLARE
Line : String := Ada.Text_IO.Get_Line(Input);
StrippedLine : String := Strip(Line, "-");
BEGIN
我假设您的 "Strip" 函数在这里正常工作..
我正在尝试使用 Integer'Value 将字符串转换为整数。这对于通过文件的第一个循环工作正常,但之后我得到一个错误的 'value (raised Constraint_Error) 输入。我希望有人能告诉我我的方法的错误,这样我就可以转换字符串到每个循环的整数。
WITH Ada.Text_IO, Ada.Integer_Text_IO;
USE Ada.Text_IO, Ada.Integer_Text_IO;
PROCEDURE Isbntest IS
FUNCTION Strip(The_String: String; The_Characters: String)
RETURN String IS
Keep: ARRAY (Character) OF Boolean := (OTHERS => True);
Result: String(The_String'RANGE);
Last: Natural := Result'First-1;
BEGIN
FOR I IN The_Characters'Range LOOP
Keep(The_Characters(I)) := False;
END LOOP;
FOR J IN The_String'RANGE LOOP
IF Keep(The_String(J)) THEN
Last := Last+1;
Result(Last) := The_String(J);
END IF;
END LOOP;
RETURN Result(Result'First .. Last);
END Strip;
Input: File_Type := Ada.Text_IO.Standard_Input;
BEGIN
WHILE NOT End_of_File(Input) LOOP
DECLARE
Line : String := Ada.Text_IO.Get_Line(Input);
StrippedLine : String := line;
ascii_val: Integer :=0;
BEGIN
StrippedLine := Strip(Line, "-");
ascii_val := integer'value(StrippedLine);
Put(ascii_val);
Put_line(StrippedLine);
END;
END LOOP;
Close (Input);
end isbntest;
问题是您在创建数组后弄乱了数组的长度。不要那样做。
而不是
DECLARE
Line : String := Ada.Text_IO.Get_Line(Input);
StrippedLine : String := line;
BEGIN
StrippedLine := Strip(Line, "-");
声明时直接将Stripped_Line初始化为正确的大小即可。
DECLARE
Line : String := Ada.Text_IO.Get_Line(Input);
StrippedLine : String := Strip(Line, "-");
BEGIN
我假设您的 "Strip" 函数在这里正常工作..