【问题标题】:Read 2 lines of input into 2 arrays将 2 行输入读入 2 个数组
【发布时间】:2019-08-29 18:20:41
【问题描述】:

我正在尝试转换如下输入:

1 5 9 12 16 21 25
3 7 12 13 14 15 16 19 20 26

分成2个数组,每一行输入一个数组。目前我有以下代码:

FUNCTION readId : integer;

    VAR
        id : integer;
        i : integer;
        first : a;
        second : a;

    TYPE
        a = ARRAY[0..(size - 1)] OF integer;

    BEGIN

        i := 0;
        WHILE (NOT eoln) DO BEGIN
            read(id);
            first[i] := id;
            Inc(i);
        END;


        i := 0;
        WHILE ((NOT eof) AND (NOT eoln)) DO BEGIN
            read(id);
            second[i] := id;
            Inc(i);
        END;
    END;

这适用于第一个数组,但第二个数组未填充。我做错了什么?

【问题讨论】:

  • 使用调试器找出原因。考虑读取没有进行到第二行的可能性。
  • 您为什么使用旧式 Pascal I/O,而不是新式 RTL 式 I/O?您可以使用TStringListTStreamReader 来读取各个行,并使用单独的TStringList 来解析每一行。
  • 顺便说一句,正如所写,您的代码将无法编译,因为 a 的声明位于定义它的 type 声明之前,而 size 未定义。以后请附上您的actual 代码,这样读者就不必将时间浪费在此类错误上。
  • @MartynA 我找不到如何调试我的帕斯卡代码?
  • 你在哪里看过?参见例如docwiki.embarcadero.com/RADStudio/Rio/en/…

标签: arrays delphi input stdin pascal


【解决方案1】:

第一个while 循环将在eolntrue 时结束,而在第二个while 循环的开头eoln 仍为true。这意味着第二个while 循环的主体永远不会执行,因为条件((not eof)) and (not(eoln)) 将是false

您可以尝试在第二个 while 循环之前放置一个 readln

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多