非常简单的问题,我想我脑子短路了,帮我看看错在哪?

weill 2005-03-15 09:09:47
StartBar为一进度条控件
下面代码为怎么是一个死循环?

int SLTime = 10;
for(StartBar->Position;StartBar->Position <= 100;StartBar->Position++){
Sleep(SLTime);
};

不要告诉我按下面的方法改:

int SLTime = 10;
for(int i = StartBar->Position;i <= 100;i++){
StartBar->Position = i;
Sleep(SLTime);
};

我知道改,我只想知道错在哪?
...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
weill 2005-03-17
  • 打赏
  • 举报
回复
beornotbeisaproblem() 的答案正确,谢谢。
偶的脑子的确短路了,嘻嘻。

这样的问题大家也能猜出来,呵呵,难得。谢谢各位啦……
FallenAngel 2005-03-16
  • 打赏
  • 举报
回复
属性不是一般数据,不能使用一般数据的某些操作符
NjuCobra 2005-03-16
  • 打赏
  • 举报
回复
俺是小弟,只能多看看,多学学1!!!
我来看看CB 2005-03-16
  • 打赏
  • 举报
回复
学习中。
  • 打赏
  • 举报
回复
哈哈:真正的原因是:

StartBar->Position变为100后就不再变化。所以条件一直满足,死循环

注:不会变为0
ThinkX 2005-03-16
  • 打赏
  • 举报
回复
我猜想的结果是
StartBar->Position++
这行代码中,StartBar->Position的值是始终不变的,所以循环无终结。

原因如下:
StartBar->Position中的Position是一个属性,而不是一个数据成员,
在编译器内部处理时编译成如下
StartBar->GetPosition()。
而StartBar->GetPosition()++,则是对函数的临时返回值做了++运算,而根本没有改变真正的position.
这时需要一个显式的对属性赋值:
试着将StartBar->Position++ 改为StartBar->Position = StartBar->Position + 1
这样被编译器编译为StartBar->SetPosition(StartBar->GetPosition() + 1);
就可以了吧。

GeoPhoenix 2005-03-16
  • 打赏
  • 举报
回复
这样试一下
{
StartBar->Position = 0;
StartBar->Max = 100;
int SLTime = 10;
for(StartBar->Position;StartBar->Position <= 100;StartBar->Position++){
Sleep(SLTime);
Application->ProcessMessages();
};
cfanzhang 2005-03-15
  • 打赏
  • 举报
回复
Position默认的Min和Max分别为0和100,所以当Position为100时,Position就不能再Position++了,可能就变为0,这样的话就变为死循环了。你可以跟踪测试一下。
thp 2005-03-15
  • 打赏
  • 举报
回复
估计你的StartBar->Max为100(默认值)
到100后再增加就变为0了,所以就死循环了.
h98458 2005-03-15
  • 打赏
  • 举报
回复
StartBar->Position的值是不是没有初始化?
有哥 2005-03-15
  • 打赏
  • 举报
回复
跟踪看看再说

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧