Pascal assign()导致错误106(错误的数字格式)

时间:2014-04-15 23:13:35

标签: pascal

我写了这个程序,但我无法弄清楚它有什么问题。 SkaitytiDuomenis(读取值)过程将两个数组作为参数,因此它可以从文本文件中读取坐标并将它们存储在数组中,但问题是它并没有真正读取它。 assign()部分有问题,但我无法弄清楚我的生活。任何帮助的人都将非常感激,因为这是我正在准备的州考试。

program Uzduotis1;
type
    masyvas = array[1..50] of integer;
{*************************Kintamieji************************}
var
    Duomenys, Rezultatai :text;
    x, y                 :masyvas;       {koordinates (x;y) }
    UzsakymuSk,                           {uzsakymu skaicius}
    DienosKm,                    {dienos kilometrazo limitas}
    NuvaziuotiKm,                 {nuvaziuotu kilometru suma}
    LikeKlientai,             {neaptarnautu klientu skaicius}
    UzsakymoNr                  {atliekamo uzsakymo numeris}
                         :integer;
{*************************Proceduros************************}
procedure SkaitytiDuomenis(var a,b:masyvas);
var i:integer;
begin
    for i:=1 to UzsakymuSk do
        readln(Duomenys, a[i], b[i]);
end;
procedure IsvestiRezultatus;
    begin
        rewrite(Rezultatai);
        write(LikeKlientai,' ',NuvaziuotiKm);
        close(Rezultatai)
    end;
{************************Funkcijos**************************}
function atstumas(a,b :integer) :integer;
    begin
        atstumas := (abs(a) + abs(b)) * 2;
    end;
{********************Pagrindine programa********************}
begin
    assign(Duomenys,'C:\Duomenys\U1.txt');
    assign(Rezultatai,'C:\Duomenys\U1rez.txt');
    reset(Duomenys);
    readln(Duomenys,UzsakymuSk,DienosKm);
    SkaitytiDuomenis(x,y);
    NuvaziuotiKm := 0;
    LikeKlientai := UzsakymuSk;
    UzsakymoNr := 1;
    while ((UzsakymoNr<UzsakymuSk) and (NuvaziuotiKm<DienosKm)) do
        begin
            NuvaziuotiKm := NuvaziuotiKm + atstumas(x[UzsakymoNr],y[UzsakymoNr]);
            LikeKlientai := LikeKlientai - 1;
            UzsakymoNr := UzsakymoNr + 1
        end;
    IsvestiRezultatus;
end.

这是输入文件:

14 30
2 3
3 –1
-2 –4
–3 0
-2 4
0 2
5 -4
1 2
4 -3
2 1
-5 -5
-1 0
0 5
2 5

2 个答案:

答案 0 :(得分:0)

您是否直接通过PC将输入文本文件复制/粘贴到问题中?当我把它复制出来时,我发现了一些意想不到的字符:

$ od -c U1.txt
0000000   1   4       3   0  \n   2       3  \n   3     342 200 223   1
0000020  \n   -   2     342 200 223   4  \n 342 200 223   3       0  \n
0000040   -   2       4  \n   0       2  \n   5       -   4  \n   1
0000060   2  \n   4       -   3  \n   2       1  \n   -   5       -   5
0000100  \n   -   1       0  \n   0       5  \n   2       5  \n

因此,在读完前两行后,它会尝试从第3行读取两个ASCII整数值,因为它不是有效文本。我从原始文件中删除了第3,4和5行,然后程序运行了。

尝试重新生成文本文件。或者检查生成它的程序,如果它是你的。

答案 1 :(得分:0)

您的输入文件格式不正确。它包含十六进制UTF8字符序列E2 80 93,它等同于en-dash,code point 8211 decimal

这可能是因为文件是使用文字处理器而不是文本编辑器创建的,很少是个好主意。

只需用真正的-个(code point 45 decimal)替换短划线字符,一切都应该很好。