我的字符串比较函数没起作用???? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiBase/html/delphi_20061205175922278.html
最近老师要求我们模拟页面置换的先进先出,在进行页面置换的时候,我希望先对页面名称进行比较,一样的话,就没必要进行置换.
procedure TForm1.Button3Click(Sender: TObject);
var h,m:integer; flag:boolean;
begin
flag:=true;
for h:=1 to listbox1.ItemIndex do
// h作为新进页面与已有页面的比较的控制循环变量
begin
if sametext(edit2.Text,listbox1.Items[h])then
begin
flag:=false; // 物理块中存在与新进页面一样的页面
end
else
begin
flag:=true;//新进页面在物理块中没有
end;
end;
if flag=false then
begin
showmessage('页面已存在,不需要置换');
edit2.Clear;
edit2.SetFocus;
end
else
begin //根据fifo算法 进行替换
m:=i mod strtoint(edit1.Text);
listbox1.Items[m]:=edit2.Text;
edit2.Clear;
edit2.SetFocus;
i:=i+1;
end;
end;
但是无论我输入什么变量,他会进行置换,不管是不是存在相同的页面,然而我也怀疑是sametext相同的话,返回的值是false,试过也不行,也用过(<>),和另外一个函数,但是都没用,感觉好像没进行比较这一步....??? 请问大家这是怎么回事,多谢!!!!
//你的代码风格太差,难道你们老师就没说过你?
//你照着VCL里的代码风格编写
//这个问题关键是在循环中赋值又没有退出循环,那当然flag值就是最后一条判断出来的值
//参考如下代码:
flag := True;
for h := 0 to Listbox1.ItemIndex do
// h作为新进页面与已有页面的比较的控制循环变量
begin
if SameText(Edit2.Text, Listbox1.Items[h])then
begin
flag := False; // 物理块中存在与新进页面一样的页面
Break; // <<<<<<<<<<<<<<<<<退出循环
end;
end;
for h:=1 to listbox1.ItemIndex do
-----------------------------------
你的问题是程序没有执行h作为新进页面与已有页面的比较的控制循环变量,而Flag的初始值为True,为什么没有执行呢,你把循环按下面改一下就可以了.
for h:=0 to pred(listbox1.Items.count) do
谢谢你们 照你们的改后,程序可以达到我预期的效果了 zswang :关于代码风格的问题,我以后会注意的 你的代码很精简,从中我也看出了我的问题.但是在循环控制的那个部分也要照sanmaotuo的改 呵呵,经过你们俩的指导,我学到了东西,谢谢