📄 subject_61937.htm
字号:
<p>
序号:61937 发表者:船 发表日期:2003-11-23 14:09:05
<br>主题:关于Edit Box中输入内容有效性的检测,请教高手!
<br>内容:edit box中,可以指定5种类型之一的输入(short/int/long/float/double),对于选定的一种类型,如何去判断所输入的内容是否是指定的类型(即使输入的不是指定类型也是允许输入的,输入完毕去判断是否有效)?谢谢您的帮助!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:张庆芳 回复日期:2003-11-23 16:36:33
<br>内容:这个问题恐怕有点毛病,比如,指定是类型是double,这时,你输入33这个int型数值是合法的,那么,按照你的想法,这个数值是不是指定的类型呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:船 回复日期:2003-11-23 17:51:00
<br>内容:输入的33check后是合法的
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:红苹果 回复日期:2003-11-23 18:12:51
<br>内容:有点意思,你干吗要这样作呢?办法倒是可以想出的。<BR>1. 首先用一个double型的变量(设为d)接收数据。<BR>2. 如果指定类型不是double,判断:<BR>3. 是float(设为f),将d强制转换赋给f,再判断if( d == (double)f )则有效。<BR>4. 对于short/int/long,只要处理short、int/long(32位)或short/int、long(16位),方法一样,设long的变量为n;<BR> double fraction,integer;<BR> fraction = modf( d, &integer );<BR> if( d == integer ) // 没有小数部分<BR> {<BR> n = long(integer );<BR> if( integer == double(n) ) // 判断d值的范围是否超出一个long<BR> 有效<BR> else<BR> 无效<BR> }<BR> else<BR> 无效<BR><BR>呵呵,不知道是不是这个意思?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:不说 回复日期:2003-11-23 19:36:29
<br>内容:数据输入进来是为进一步的计算做准备的不是?那与其在输入的地方进行有效性检验还不如在运算的过程中做检验呢,如果输入错误再返回给用户错误信息可能会更准确一点。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:沈落 回复日期:2003-11-23 22:23:24
<br>内容:你可以用DoDataChange来进行检验。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:船 回复日期:2003-11-23 22:26:37
<br>内容:谢谢各位的回答,还有些问题可能我说的不是太明确,比如现在指定的类型是double,在edit box输入了“3e+2”应该有效,而输入了“3e+2aa”应该无效,又比如指定的类型是int,输入了“2.00”也应该是无效的,实在不知道该怎么去检测了,各位帮着想想着数吧
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:船 回复日期:2003-11-23 22:30:00
<br>内容:怎样检验啊,5楼能举个例子吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:浪际天涯 回复日期:2003-11-23 23:48:37
<br>内容:如果要这样的话,自己写代码判断呗
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:不说 回复日期:2003-11-24 10:06:06
<br>内容:我就说啊,你先别管用户输入的是什么东西,一股脑的先传到后边的计算逻辑里,如果计算的过程中出错再提示给用户好了,要不然,干脆从后边的计算逻辑里提出来一部分代码先“假算”一下作为检测的依据也可以。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:菜鸟人飞 回复日期:2003-11-24 10:22:36
<br>内容:如果各位方便的话提供个例子,可以会更直观一些,不知可否!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:沈落 回复日期:2003-11-24 12:29:24
<br>内容:long LengthOfString(const char *str)<BR>{<BR> long i=0;<BR> while(*str++) i++;<BR> return i;<BR>}<BR><BR>long GetUnCharPosFromRight(const char *str1,char chr)<BR>{<BR> long strlen=LengthOfString(str1),pos=strlen,i;<BR> str1+=strlen-1;<BR> for(i=0;i<strlen;i++)<BR> {<BR> if(*str1--!=chr) return pos;<BR> pos--;<BR> }<BR> return pos;<BR>}<BR><BR>//把DOUBLE的数据转换成有E等表示的科学计数法。<BR>void DoubleToString(double sum,char str[])<BR>{<BR> int sumlen=1;<BR> double bk_sum=sum;<BR> if(!sum)<BR> {<BR> str[0]=' ';<BR> str[1]='0';<BR> str[2]='.';<BR> str[3]=0;<BR> return;<BR> }<BR> if(sum<0) sum=-sum;<BR> while(sum>=10)<BR> {<BR> sum/=10;<BR> sumlen++;<BR> }<BR> sum=bk_sum;<BR> if(sumlen>30)<BR> {<BR> sprintf(str,"%E",sum);<BR> return;<BR> }<BR> sprintf(str,"%f",sum);<BR> str[GetUnCharPosFromRight(str,'0')]=0;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:沈落 回复日期:2003-11-24 12:34:55
<br>内容://关于数据类型的检验,如果你是在一个DIALOG里面的变量,直接用下面这个函数就行。<BR>void CCatDlg::DoDataExchange(CDataExchange* pDX)<BR>{<BR>/*在这个函数里面加入你的判断语句,不过一般CLW已经加好了。<BR>函数形如void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, BYTE& value );<BR>*/<BR>}<BR>如果不是DIALOG的话,最好是自己写个函数判断一下。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:红苹果 回复日期:2003-11-24 19:25:31
<br>内容:我这里有一个设置edit的输入日期格式的类,你参考参考,应该能解决。<BR><BR><BR>附件为日期输入类:
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:船 回复日期:2003-12-01 12:54:51
<br>内容:问题在别人的帮助下已经得到解决<BR>用double strtod( const char *nptr, char **endptr );<BR>nptr是要转换的字符串,返回值是转换完的double数值,endptr纪录转换到字符的位置,多谢各位的帮助!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -