好的,所以我试图让Pascal从输入文件中读取一组整数,然后取偶数并将它们加在一起,范围为1-50。不适合我。这是我有的: 输入文件编号列表 1 2 3 4 5 6 7 8 9 11 12 64 13 14 15 16 71 33 34 35 36 41 44 46 82 512 49 50 我的pascal计划:
program even(input,output,indata);
uses crt;
Var
indata:text;
num, even:integer;
begin
clrscr;
assign(indata, 'j:\num.txt');
reset(indata)0;
read(indata, num);
while num>50 do
begin
read(indata, num);
if num mod 2=0 then
even:=even+num;
end;
writeln('Even sum is', even);
readln( );
end.
任何帮助都会很棒!当我运行它时,我得到文本为“偶数为0”。
答案 0 :(得分:1)
您需要先修复代码,以便编译。在结束reset
之后调用0
的行有)
,这是无效的语法。
您需要先初始化even
变量,使其包含有效的起点。
接下来,您需要修复while
循环中的逻辑。这是倒退。 :-)如果你想在最后停止,你需要测试num < 50
- 你现在对num > 50
的测试意味着循环永远不会执行,因为第一个值({{1} })结束1
循环。
这适用于Delphi中的普通控制台应用程序。
while
它产生输出(根据你的代码编写方式是正确的,因为它在program Project2;
uses
SysUtils;
var
InData: Text;
num, even: Integer;
begin
AssignFile(InData, 'D:\TempFiles\numbers.txt');
reset(indata);
read(indata, num);
even := 0;
while num < 50 do
begin
read(indata, num);
if num mod 2 = 0 then
even := even + num;
end;
writeln('Even sum is ', even);
readln;
end.
循环中读取值64
,因此比它应该执行的时间多1倍,并且{ {1}}即使如此,它也会被添加到while num
- 我会留下让你弄明白的。 : - )
64
答案 1 :(得分:0)
几十年没有完成Pascal,但如果我记得:
你说的是:
while num > 50 do
并且你的第一个数字是1,所以它只是跳过循环并打印'even'的初始值,即0。
你可能意味着:
while num < 50 do
但即便如此,也会以第一个50或更高的值退出。
如果你想读取所有数字,但过滤掉那些超过50的数字,我认为它更像是:
program even(input,output,indata);
uses crt;
Var
indata:text;
num, even:integer;
begin
clrscr;
assign(indata, 'j:\num.txt');
reset(indata)0;
(* read all of the numbers *)
while not eof(indata) do
begin
read(indata, num);
(* skip those greater than 50 *)
if num <= 50
begin
if num mod 2=0 then
even:=even+num;
end;
end;
writeln('Even sum is', even);
readln( );
end.
答案 2 :(得分:0)
以前的海报给出了很好的建议,但我会在最后添加(end.
之前)
CloseFile(infile)
或Close(infile)
(取决于您的Pascal版本)。这可能不会影响程序输出但是养成未来的好习惯 - 如果你正在写文本文件(而不是阅读)并且不关闭它,你可能会发现一些文本丢失,或者文件变得不可读。