pascal文件读取循环总是在最后读取额外的行

时间:2018-01-22 03:01:02

标签: while-loop pascal readfile eof

我正在学习如何使用pascal从文本文件中读取整数。该程序应该读取和打印10个整数,但它实际上打印了11个值,它最后打印了0个。我在编写c ++程序时遇到了同样的问题,但是我使用while(inFile >> num)而不是while(!EOF{infile >> num;}解决了这个问题。 这是我的程序的pascal代码:

program testRead;
uses crt;
var
    nSize : integer;
    num, sum : longint;
    root : real;
    f : text;
begin
    assign(f, 'numbers.txt');
    reset(f);

    nSize := 0;

    while not eof(f) do
    begin
            read(f, num);
            writeln(num);
    end;

    close(f);
end.

1 个答案:

答案 0 :(得分:0)

首先,文件显然在最后一行之后还有一个Carriage Return, Line feedCRLF)对,这没关系,但是如果没有一个,你就不会看到问题

您需要知道可以使用read()readln()读取标准输入或文件。 read()不会从行尾删除CRLF,这意味着当您从文件中读取最后一个数字时,eof(文件末尾)实际上不是真的。

要更正您的计划,请使用readln()代替read()

您可以详细了解read()readln() here

之间的差异