Ada 读取一个字符串(相当于 scanf %s)

Ada read a string (scanf %s equivalent)

如何在 C 中读取类似于 scanf("%s") 的单词(跳过空格并读取字符直到遇到空格)?

Skip_Leading_Space:
loop
   Next := Ada.Text_IO.Get;
   exit when not Next in Whitespace;
end loop Skip_Leading_Space;

Read_Word:
loop
   Word := Word & Next;
   Next := Ada.Text_IO.Get;
   exit when Next in Whitespace;
end loop Read_Word;

正在从标准输入中读取一个单词。写成一个函数。 (未经测试。)

function Next_Word return String is
   package Latin_1 renames Ada.Characters.Latin_1;

   subtype Whitespace is Character
     with Static_Predicate => Whitespace in ' ' | Latin_1.HT;

   use all type Ada.Strings.Unbounded.Unbounded_String;

   Word : Ada.Strings.Unbounded.Unbounded_String;
   Next : Character;
begin
   Skip_Leading_Space:
   loop
      Ada.Text_IO.Get (Next);
      exit when not (Next in Whitespace);
   end loop Skip_Leading_Space;

   Read_Word:
   loop
      Word := Word & Next;
      Ada.Text_IO.Get (Next);
      exit when Next in Whitespace;
   end loop Read_Word;

   return To_String (Word);
end Next_Word;

您想扫描,因此最好使用 Ada 标准库中为此目的提供的内容。一位候选人是 Ada.Strings.Fixed.Find_Token.

with Ada.Strings.Fixed, Ada.Strings.Maps.Constants, Ada.Text_IO;
use Ada.Text_IO, Ada.Strings;

procedure Read_Word is
    Text  : constant String    := Get_Line;
    First : Positive;
    Last  : Natural;
    White : Maps.Character_Set := Maps.To_Set (" ");
begin
    Fixed.Find_Token
      (Source => Text,
       Set    => White,
       Test   => outside,
       First  => First,
       Last   => Last);
    Put_Line ("word is: " & Text (First .. Last) & '.');
end Read_Word;