woaijt 发表于 2017-3-3 20:07:06

新人求助,计算类程序数值大后卡死?

   
   各位前辈高手,写了个数值计算程序,发现输入的数值过大就会出错或程序卡死,请问是什么原因?(见附件程序及源码)




附上源码:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Label3: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    procedure Button1Click(Sender: TObject);
   private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Num:Array of Integer;
sl,s,i,max,max_i:Integer;
begin
sl:=StrToInt(Edit2.text);
s:=StrToInt(Edit1.Text);
SetLength(Num,sl);
For i:=1 to sl do
begin
   Edit4.Text:=Edit4.Text+IntToStr(s)+',';
Num:=s;
s:=s+1;
While( Pos(Edit3.Text,IntToStr(s)) >0 ) do   //Pos:取出子串在父串中第一次出现的位置
   begin
    s:=s+1;
   end;
   While( Pos(Edit7.Text,IntToStr(s)) >0 ) do   //Pos:取出子串在父串中第一次出现的位置
   begin
    s:=s+1;
   end;

end;

max:=Num;
max_i:=1;
   For i:=2 to sl do
   begin
      If (max < Num) then
      begin
      max:=Num;
      max_i:=i;
      end;
      Edit5.Text:=IntToStr(max);
      Edit6.Text:=IntToStr(max_i);
   end;

end;
end.

新手·ing 发表于 2017-3-3 21:10:23

是不是数值大小有限制

woaijt 发表于 2017-3-4 08:10:44

新手·ing 发表于 2017-3-3 21:10
是不是数值大小有限制

试过把变量基类Integer换成LongInt,Int64,结果还是一样!

陽光ㄟ有點冷 发表于 2017-6-1 11:31:21

写法不对

心驰神往 发表于 2020-12-23 13:04:54

调试看看

rabbin 发表于 2023-1-14 17:41:10

While( Pos(Edit3.Text,IntToStr(s)) >0 ) do   //Pos:取出子串在父串中第一次出现的位置
   begin
    s:=s+1;
   end;

两个while语句, 改成if。

rabbin 发表于 2023-1-14 17:42:04

用循环语句,又不设置跳出的条件,无限循环
页: [1]
查看完整版本: 新人求助,计算类程序数值大后卡死?