Loops 试图让Pascal从文件中读取,然后添加所有有问题的偶数。
好的,我试着让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程序:Loops 试图让Pascal从文件中读取,然后添加所有有问题的偶数。,loops,for-loop,pascal,Loops,For Loop,Pascal,好的,我试着让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; b
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” 几十年来没有做过Pascal,但如果我记得的话: 你是说:
while num > 50 do
您的第一个数字是1,因此它跳过循环并打印“偶数”的初始值,即0
你的意思可能是:
while num < 50 do
而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.
程序偶数(输入、输出、indata);
使用阴极射线管;
变量
indata:文本;
num,偶数:整数;
开始
clrsc;
赋值(indata,'j:\num.txt');
复位(indata)0;
(*读取所有数字*)
而不是eof(indata)做什么
开始
读取(indata,num);
(*跳过大于50的部分*)
如果num几十年没有做过Pascal,但如果我记得:
你是说:
while num > 50 do
您的第一个数字是1,因此它跳过循环并打印“偶数”的初始值,即0
你的意思可能是:
while num < 50 do
而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.
程序偶数(输入、输出、indata);
使用阴极射线管;
变量
indata:文本;
num,偶数:整数;
开始
clrsc;
赋值(indata,'j:\num.txt');
复位(indata)0;
(*读取所有数字*)
而不是eof(indata)做什么
开始
读取(indata,num);
(*跳过大于50的部分*)
如果num您需要首先修复代码,这样它甚至可以编译。调用reset
的行在关闭)
后具有0
,这是无效的语法
您需要首先初始化偶数
变量,以便它包含一个有效的起点
接下来,您需要修复while
循环中的逻辑。它是向后的。:-)如果要在结束时停止,则需要测试num<50
——现在对num>50
进行的测试意味着循环将永远不会执行,因为第一个值(1
)在循环时结束
这在Delphi中的普通控制台应用程序中起作用
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.
您需要首先修复代码,这样它甚至可以编译。调用reset
的行在关闭)
后具有0
,这是无效的语法
您需要首先初始化偶数
变量,以便它包含一个有效的起点
接下来,您需要修复while
循环中的逻辑。它是向后的。:-)如果要在结束时停止,则需要测试num<50
——现在对num>50
进行的测试意味着循环将永远不会执行,因为第一个值(1
)在循环时结束
这在Delphi中的普通控制台应用程序中起作用
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.
前面的海报给了我很好的建议,但我想在末尾加上一句(在结尾之前。
)
CloseFile(infle)
或Close(infle)
(取决于您的Pascal版本)。这可能不会影响程序输出,但对未来来说是一个好习惯-如果您正在向文本文件写入(而不是从中读取)而不关闭它,您可能会发现某些文本丢失,或者文件无法读取。前面的海报给出了很好的建议,但我会在结尾处添加(在结束之前。
)
CloseFile(infle)
或Close(infle)
(取决于您的Pascal版本)。这可能不会影响程序输出,但对将来来说是一个好习惯-如果您正在向文本文件写入(而不是从中读取)而不关闭它,您可能会发现某些文本丢失,或者文件无法读取。@KenWhite如何修复?谢谢您的输入。谢谢,但不编译可能是因为Ken说的错误。@KenWhite您如何修复它?谢谢你的输入。谢谢,但是不编译可能是Ken说的错误。并且总是,总是,提到你的编译器和版本,总是,总是,提到你的编译器和版本