从文本文件中读取数组

时间:2017-05-28 15:21:40

标签: pascal

我有问题。当程序读取文本文件时,它总是脱离行并崩溃。

var f:text;
    i,j,cs:byte;
    a:array[0..10,0..10] of int64
begin
    assign(f,'anything.txt');
    reset(f);
    cs:=0;
    while eoln(f)=false do
    begin
        read(f,a[0,cs]);
        inc(cs);
    end;
    close(f);
end.

以下是anything.txt的内容: 2 4 8 16

退出码= 201

1 个答案:

答案 0 :(得分:2)

您还没有告诉我们您使用的是哪种编译器。

在之前的Delphi和Turbo Pascal中,运行时错误201表示"范围检查错误"。我还没有安装Turbo Pascal但是你的程序编译并运行作为一个"控制台应用程序"正确地在Delphi中只有一个小的改动,即在int64之后插入一个分号(&#39 ;;')。无论编译器是否打开了范围检查,它都能正确运行。

它也可以在FreePascal + Lazarus中正确运行。

因此,除非您使用的其他编译器也碰巧有运行时错误代码201,否则您的问题似乎是由您未在问题中包含的内容引起的。无论如何,你应该学会自己调试这类问题。所以:

查看如何使用Pascal编译器中的调试器。在inc(cs)行上放置一个断点,例如按 F5 并运行程序。当它停在BP时,将调试监视(在Delphi / TP中使用 Ctrl-F5 )放在csa的值上并仔细观察值。反复按 F8 单步执行程序,看看是否可以看到它出错的地点和原因。

造成问题的一种可能性是您没有在{2}上阅读您认为自己的副本:因为您没有在anything.txt Windows中包含该文件的路径将使用assign(f的副本(如果有的话),无论它认为当前目录是什么。要避免这种情况,请包括文件所在的路径,如

anything.txt

另外顺便说一句,你不需要再次比较assign(f, 'C:\PascalData\Anything.Txt'); true的布尔函数(或表达式),如

false

相反,你可以简单地做

 while eoln(f)=false do