为什么跳不出这个循环?在线等!

hefeigunfire 2003-09-12 03:15:30
while(m_bEpoch==0.0||m_bLr==0.0||m_bMc||0.0)
{
if(m_bEpoch==0.0&&m_bLr==0.0&&m_bMc==0.0)
break;
if(m_bLr==0.0)
::MessageBox( NULL,"Please input correct learnrate!","错误",MB_OK);
if(m_bMc==0.0)
::MessageBox( NULL,"Please input correct momentfactor!","错误",MB_OK);
if(m_bEpoch==0.0)
::MessageBox( NULL,"Please input correct epoch!","错误",MB_OK);
UpdateData(true);
}
总是出现错误对话框,根本不给机会让我重新输入数据!
...全文
73 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
lemonwdj 2003-09-12
  • 打赏
  • 举报
回复
要输入数据的话,你应该在循环内调用输入数据的函数,否则将是死循环(未改变变量的值)
howtotell 2003-09-12
  • 打赏
  • 举报
回复
goto
guankaifu 2003-09-12
  • 打赏
  • 举报
回复
总之还是有了基础在学编程才是真正的在编程。。不过学习基础之前先编程是一件好事情,
因为他可以让你得到编程的乐趣。。从而让你在学习枯燥的基础的时候能得到动力和希望。。
祝你学习顺利一帆风顺。。。
hefeigunfire 2003-09-12
  • 打赏
  • 举报
回复
我试试
guankaifu 2003-09-12
  • 打赏
  • 举报
回复
这完全可以的。。而且我们只能这么做。。
比如我把他放在onok()函数中。也就是对应的一个按钮的单击。
我输入一个直。按一次按钮程序就执行一次。。
在输入。。在按。。又执行一次。。
你按几次他就执行几次。。
不按他是不执行的。。明白了吧。。
guankaifu 2003-09-12
  • 打赏
  • 举报
回复
一般break语句只能用在循环体中。。也就是swith ......case break 是允许的。。
不能用在条件语句中。。
在有你的思想不正确是因为你用了。MessageBox放在循环体中了。。
我之所以要你用输出框是因为。。输入可以被覆盖。。
而MessageBox你不点确定他是不会覆盖的。。
也就是说你的循环体输出多少就有多少MessageBox。
hefeigunfire 2003-09-12
  • 打赏
  • 举报
回复
我补充一点:上述代码能不能实现循环检验?即可能出现第一次输入错误,第二次输入仍然错误的这种重复输入错误的问题?
hefeigunfire 2003-09-12
  • 打赏
  • 举报
回复
D:\JetPumpDlg.cpp(483) : error C2043: illegal break
Error executing cl.exe.
怎么会非法break?
guankaifu 2003-09-12
  • 打赏
  • 举报
回复
但是我们习惯上经常把输入和输出框分开。。也就是如果需要输入3个框。。
结果要求输出3个。。我们就做6个框。
输出和输入的分开。。这是个好习惯。。
不应该一个框既做输出还做输入。。虽然也可以。。
guankaifu 2003-09-12
  • 打赏
  • 举报
回复
你可以这样写。。先对输入框赋值。。然后在检测用户发送的消息。。
m_bEpoch=0;
m_bLr=0;
m_bMc=0;
if(UpdateData()==TRUE)//用户输入
{
if(m_bEpoch==0.0&&m_bLr==0.0&&m_bMc==0.0)
break;
if(m_bLr==0.0)
::MessageBox( NULL,"Please input correct learnrate!","错误",MB_OK);
if(m_bMc==0.0)
::MessageBox( NULL,"Please input correct momentfactor!","错误",MB_OK);
if(m_bEpoch==0.0)
::MessageBox( NULL,"Please input correct epoch!","错误",MB_OK);

}
UpdateData(FALSE);
大体结构应该是这样。。但是我没有把你的代码仔细的改。。如果有问题的话可以继续说。
中间是贴的你的代码。。
hefeigunfire 2003-09-12
  • 打赏
  • 举报
回复
我在
guankaifu 2003-09-12
  • 打赏
  • 举报
回复
我们就详细的谈一下这个问题//
如果没有输入的话if(UpdateData()==TRUE)的语句不执行。。也就是说,,
只有用户有输入或消息发送才可以启动下面的程序。。
并不是说。。没有输入的话。。检测到的输入结果就是0。。
详细的我会继续写下来的。。如果你还在的话
guankaifu 2003-09-12
  • 打赏
  • 举报
回复
非常有道理。受益匪浅。。UP..UP
但是这个主要是说单精度的数字的位数与双精度的不一样。。比较可能不太妥当。。
但是同类型的话。。单精度与单精度是完全允许的。。不存在这个问题。。
可能与你的问题关系不大。。
hefeigunfire 2003-09-12
  • 打赏
  • 举报
回复
to:guankaifu(疯牛)
我向您说一下我的思路:
有三个编辑框,用来输入以上三个变量,如果没有输入,即三个变量都是0,则接受默认值,如果有输入,则必须保证三个变量都有输入,即有一个为零的话都要重新输入。请问如何实现?谢谢
winkiky 2003-09-12
  • 打赏
  • 举报
回复
4.3.3 浮点变量与零值比较
【规则4-3-3】不可将浮点变量用“==”或“!=”与任何数字比较。
千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
假设浮点变量的名字为x,应当将
if (x == 0.0) // 隐含错误的比较
转化为
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON是允许的误差(即精度)。
摘自《高质量C++编程指南》
awant2k 2003-09-12
  • 打赏
  • 举报
回复
float/double最好不要用 = 来判断是否相等,因为它们本身就不是精确值!
guankaifu 2003-09-12
  • 打赏
  • 举报
回复
还有。。如果你是想跳出程序的话。。可以试着用return;
强大的return;
redby 2003-09-12
  • 打赏
  • 举报
回复
啊,没事的,笔误谁都有的,时间长就好了,有志者事竟成啊!呵呵!多努力·!
guankaifu 2003-09-12
  • 打赏
  • 举报
回复
if(UpdateData()==TRUE)//用户输入
{
if(m_bEpoch==0.0&&m_bLr==0.0&&m_bMc==0.0)
break;
if(m_bLr==0.0)
::MessageBox( NULL,"Please input correct learnrate!","错误",MB_OK);
if(m_bMc==0.0)
::MessageBox( NULL,"Please input correct momentfactor!","错误",MB_OK);
if(m_bEpoch==0.0)
::MessageBox( NULL,"Please input correct epoch!","错误",MB_OK);

}
UpdateData(FALSE);

大概我只能现在改成这样了。。因为你的代码的思想本身是错误的。。既然已经全都是0了
那么还要判断他们与后结果是不是0还有什么意义吗???思路错误。
我也不知道你是怎么映射的。。大概就应该是这样。。也许这段代码不能编译成功。。
但是大体是这样的结构。
yinzhaohui 2003-09-12
  • 打赏
  • 举报
回复
你的m_bEpoch m_bLr m_bMc是浮点型值不能直接使用
m_bEpoch==0比较,应当在一个范围内如

double eps=0.0000001;
如你要比较m_bEpoch==0
if(m_bEpoch>=-eps && m_bEpoch<=eps)
{
do something;
}



加载更多回复(11)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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