Ada Integer'Width 错误

thm*_*ker 0 ada width

我有这个 Ada 包代码,理论上写得很好:

with Ada.Text_IO;
with Ada.Characters.Handling;

package body pkg_procedure is
    procedure Read_Integer(Num : out Integer) is
        Intro : constant Character := ASCII.LF;
        Back : constant Character := ASCII.Del;

        Char : Character;
        Fin : Boolean := False;
        Number : Natural := 0;

        String_Number : String (1 .. Integer'Width – 1);
    begin
        Ada.Text_IO.New_line;
        Ada.Text_IO.Put ("Write down a number and press Enter: ");

        while not Fin loop
            Ada.Text_IO.Get_Immediate (Char);
            if Ada.Characters.Handling.Is_Digit (Char) then
                Number := Number + 1;
                String_Number(Number) := Char;
                Ada.Text_IO.Put (Char);
            elsif Char = Intro then
                Fin := True;
            elsif Number > 0 and Char = Back then
                Ada.Text_IO.Put (ASCII.BS & ' ' & ASCII.BS);
                Number := Number + 1;
            end if;
        end loop;

        Number := Integer'Value (String_Number (1 .. Number));
        Ada.Text_IO.New_line;
        Num := Number;

        exception
            when Constraint_Error =>
                Ada.Text_IO.New_line;
                Ada.Text_IO.Put_Line ("Sorry: " & String_Number & " is too long to store it");
                Num := 0;
    end Read_Integer;
end pkg_procedure;
Run Code Online (Sandbox Code Playgroud)

当我编译程序时,我在这条指令上得到一个错误,它说:binary operator expected.

我无法修复它。我对这种编程语言完全陌生。

Sim*_*ght 5

问题是-

    String_Number : String (1 .. Integer'Width – 1);
Run Code Online (Sandbox Code Playgroud)

不是普通-字符而是带有编码的宽字符e28093- EN DASH

我发现这是因为,在看到各种探索性更改没有显示错误后,我恢复到您的原始版本并尝试使用-gnatw8(输入为 UTF-8)以及-gnatl将消息与程序文本混合,从而导致

13.         String_Number : String (1 .. Integer'Width – 1);
                                                      12
    >>> binary operator expected
    >>> illegal wide character
Run Code Online (Sandbox Code Playgroud)