Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 试图让Pascal从文件中读取,然后添加所有有问题的偶数。_Loops_For Loop_Pascal - Fatal编程技术网

Loops 试图让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

好的,我试着让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”

几十年来没有做过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说的错误。并且总是,总是,提到你的编译器和版本,总是,总是,提到你的编译器和版本