Pascal 程序运行时,写入->-&燃气轮机-&燃气轮机->;。为什么会这样?
这是程序必须读取的文本文件,并将每个num.放在不同的变量中。 第一个数字(在本例中为3)是n,告诉程序要执行多少次。在NUM之间,有一个空格 文本文件f是这样的Pascal 程序运行时,写入->-&燃气轮机-&燃气轮机->;。为什么会这样?,pascal,freepascal,Pascal,Freepascal,这是程序必须读取的文本文件,并将每个num.放在不同的变量中。 第一个数字(在本例中为3)是n,告诉程序要执行多少次。在NUM之间,有一个空格 文本文件f是这样的 3 2 2 1 1 5 4 2 当它运行代码时,下面的内容会一直被编写 ->->->->->->->->->->->->->->->->->->->->->->->->->->-
3 2
2 1
1 5
4 2
当它运行代码时,下面的内容会一直被编写
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
为什么会这样
有人能帮我做这个项目吗
代码如下所示
Program thefinalp;
Uses SysUtils;
Var
f: Text;
m, d: Integer;
n: Char;
c: String[1];
a, e: array of Integer;
LowArr: Integer;
HighArr: Integer;
ArrayLen: Integer;
i: Integer;
begin
Assign(f, 'd:\tempfiles\finalp.txt');
Reset(f);
repeat
Readln(f, n);
Write(n);
until (n = ' ');
Read(f, c);
Write(c);
while not SeekEoln(f) do
begin
read(f, d);
Write(d);
End;
Readln;
Writeln;
StrToIntDef(n, m);
setlength(a, m);
LowArr := Low(a);
HighArr := High(a);
ArrayLen := Length(a);
setlength(e, m);
LowArr := Low(e);
HighArr := High(e);
ArrayLen := Length(e);
for i := LowArr to HighArr do
begin
repeat
Read(f, a[i]);
Write(a[i]);
until (n = ' ');
Read(f, c);
Write(c);
while not SeekEoln(f) do
begin
read(f, e[i]);
Write(e[i]);
End;
Readln;
Writeln;
End;
Readln;
End.
在第一次
重复到,您将读入字符。第一个字符将出现在n
中,其余字符将被完全跳过,直到新行被读取为止。此时,文件指针将位于第二行数据的2
由于您的测试针对的是n='
,因此将再次执行readln,这次将2
传递到n
中,并将文件指针推到第三行的1
当最终到达文件末尾时,将从文件中“读取”一个Control-Z字符。这就是你看到的角色。因为它不是空间,所以循环将永远持续
将此处的readln
更改为read
,将读取一个字符。(然后它工作了,你可以继续下一个问题…)
请记住,readln
一直读取,直到它读取了换行符Read
读入变量-如果是字符,则读取一个字符。如果它是一个字符串,它会读取一个字符串,但不会读取换行符
不幸的是,要想弄清楚你到底想做什么有点困难。此例程将读取第一行,然后将其余行放入a[?]和e[?]
使用描述性变量名称将执行一些文档,以便您可以了解正在发生的事情。因为我实际上不知道,所以我不得不做出假设,做一些事情来填补空白
查看主例程,首先指定一个文件名(为了方便起见,我使用了q21366050.txt
),然后使用重置打开该文件
下一个任务是从文件中读取第一个数字。现在您只显示了一位数,但是设置例程以处理序列很容易
n:=readinteger;
将函数readinteger
的结果分配给字符串n
readinteger
的工作方式如下:首先清除字符串st
,它是一个“局部变量”——仅适用于此例程。然后继续将字符读入ch
,直到读取的字符在“0”…“9”范围内,因此它将跳过,直到读取一个数字。然后,它将读取的数字添加到字符串st
,并继续读取字符并将其累加,直到找到的字符不是一个数字。(如果需要,该字符位于ch
)然后我们将累积的数字串分配给函数的结果
因此,n
将获得文件中第一个字符串
;下一个字符已被读取,我们知道它不是数字(否则它将被追加到返回的字符串中)
然后使用n2
重复该过程。跳过下一个数字之前的所有剩余字符,返回数字序列,并将下一个字符放入ch
然后我们将字符串n
转换为整数的结果分配给m
。您还没有描述其他号码的用途,所以它就在那里,但没有使用
设置两个ARAY,a
和e
然后使用相同的例程读取下一个整数。是否有CRLF字符并不重要-我们跳到下一个数字并返回它。对第二个数字重复这个步骤
将这两个数字转换成各自的数组
这样做m
次
最后,在显示器上写一行新行,然后再写一行报告结果
,然后重复m次
写一行,其中包含迭代编号i
和两个数组的值,a
和e
,都是转换为字符串的整数,并且=
和,
字符,表明我们不仅仅是重复从输入读取的dat
最后,等待来自键盘的输入(因为readln
没有显式的filevar),它保持程序打开,直到我们可以看到结果
现在-名义上,当然,您也应该在终止之前关闭文件…您应该正确缩进块。使您的代码更易于阅读。好的,谢谢,我正在更正它。打开编译器提示和警告。注意听他们对你说的话。然后使用调试器逐步检查代码,找出错误所在。一旦你做了那么多,如果你不能解决这个问题,你至少可以更好地描述它并缩小它的范围。我(再次)修复了你的代码格式。现在是你学会正确格式化代码的时候了(无论是在这里还是在你自己的机器上),这样我们就不必一直为你这么做了。当人们自己不做任何努力,期望别人在他们之后清理时,这会变得很烦人。在这里设置代码格式并不困难,因此如果你在自己的代码中正确地设置代码格式,那么只需复制、粘贴和击键或单击工具栏按钮即可在这里正确发布。感谢你解决了这个问题,我还是一个初学者,我尝试对代码进行缩进,但似乎需要更好的缩进,所以我在互联网上搜索了它,所以nexy yime我会发布mycode,它的格式会更好。关于编译器提示,没有编译消息。非常感谢您的帮助。您能给我推荐一种转到nexy行的方法吗?因为当
n:=readinteger;