【问题标题】:How to Loop to Get an int from stdinput, ignoring white space如何循环从stdinput获取一个int,忽略空格
【发布时间】:2015-03-01 22:03:43
【问题描述】:

所以我可以通过标准输入轻松地从我的 .txt 文件中获取我正在寻找的 int 值,但是当它之前有一个空格(或多个空格)时,它不起作用并且发生数据错误,因为它是一个整数,所以我下面的代码用于抓取一个字符串,当我把一个 int 放在那里时不起作用,因为你不能将一个 Int 与一个字符串进行比较。有关解决方法的任何想法?

 Until_loop:                 -- Loop to get chars even if space is between
       loop 

         get(int_variable);

     exit Until_loop when int_variable) /= " ";   --won't work

     end loop Until_loop;

【问题讨论】:

  • 查看 Look_Ahead 程序。如果它向您显示空白字符,请获取该字符(到字符变量)。继续这样做,直到你看到一个数字(或 + 或 -)。但我要做的是将整行作为一个字符串并将其分解。如果您知道字符串的一个切片(例如 Expression(Start ..End) 是一个整数,那么 `int_variable := Integer'value(Expression(Start .. End);' 将使用“值属性”将该切片转换为一个整数跨度>
  • 当我尝试使用 look_ahead 时,它显示“参数 End_OF_Line 缺少参数,上下文需要函数调用,找到过程名称。”
  • 这就是为什么我称它为过程,而不是函数。查找文档应该不难——adaic.org/resources/add_content/standards/05rm/html/… 就是其中之一。我推荐约翰巴恩斯的书作为一本严肃的参考书。
  • 有关使用前瞻的更多信息:radford.edu/~nokie/classes/320/proc.lookahead.html
  • 整数上的 get 应该跳过前导空格(请参阅RM A.10.8,第 8 段),所以我不清楚您的问题是什么。如果您正在做的事情比仅仅从由空格分隔的文件中读取整数更复杂,那么我同意 Brian 的第二句话,即阅读整行并自己处理。

标签: ada ada2012


【解决方案1】:

ajb 是正确的整数已经进行了空间检查,我的代码只是把它搞砸了。获取整数不需要循环,但它适用于字符串/字符。

【讨论】:

    【解决方案2】:

    所以你可以使用 'Value 属性从 string 到 int 和 'Image 从 int 到 string。这些是 Ada 中的属性。学习如何有效地使用属性肯定会提高您的 Ada 工作效率。

    基本上我认为这可以满足您的需求。您可以读取字符串并将字符串转换为整数与

    with Ada.Text_IO; use Ada.Text_IO;
    procedure Foo is
        Str: String(1 .. 10) := (others => ' ');
        Last_Char : Integer;
    begin
        Put("Enter num: ");
        Get_Line(Str, Last_Char);
        Put_Line("Str = """ & Str & """");
        Put_Line("Last = " & Integer'Image(Last_Char));
        Put_Line("The num is " & Integer'Value(Str));
    end Foo;
    

    它产生输出:

    Enter num: 1239
    Str = "1239      "
    Last_Char =  4
    The num is 1239
    

    如果您需要帮助迭代这个想法并将您的原始问题转变为稍微不同的方法,请告诉我。我很乐意与您合作 ;)

    【讨论】:

      猜你喜欢
      • 2022-11-04
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多