我遇到了一个棘手的问题.
我先从输入栏中将数据提取出来,这时数据是CSTRING型的,然后我将他转换成FLOAT型的,然后进行计算。我做了 一个简单的判断,输入的是否为数字。但是它只能判断不是一数字开头的情况。如果是以数字开头,后面是字符的情况,它就判断不出来了。我找了好久,都找不到解决的办法。请大家帮忙。
PS 因为我现在德国,这个是我做实习的程序。所以里面会出现德语,我觉得应该不影响大家看我的程序。如果有看不明白的,我可以为大家解释一下。
下面是我的代码
//Eingangsdaten abzunehmen
GetDlgItemText(IDC_EDIT1,m_Druck);
GetDlgItemText(IDC_EDIT2,m_Temp);
GetDlgItemText(IDC_EDIT3,m_GeoV);
GetDlgItemText(IDC_EDIT7,m_Teufe);
if (atof(m_Druck) == 0||atof (m_Temp)== 0|| atof (m_GeoV) == 0 ||atof (m_Teufe) == 0)
{
MessageBox ("Eingabe müssen die Zahle sein! \nBitte Sie noch einmal eingeben! ","Eingabe - Info",MB_ICONEXCLAMATION);
return ; }
我先从输入栏中将数据提取出来,这时数据是CSTRING型的,然后我将他转换成FLOAT型的,然后进行计算。我做了 一个简单的判断,输入的是否为数字。但是它只能判断不是一数字开头的情况。如果是以数字开头,后面是字符的情况,它就判断不出来了。我找了好久,都找不到解决的办法。请大家帮忙。
PS 因为我现在德国,这个是我做实习的程序。所以里面会出现德语,我觉得应该不影响大家看我的程序。如果有看不明白的,我可以为大家解释一下。
下面是我的代码
//Eingangsdaten abzunehmen
GetDlgItemText(IDC_EDIT1,m_Druck);
GetDlgItemText(IDC_EDIT2,m_Temp);
GetDlgItemText(IDC_EDIT3,m_GeoV);
GetDlgItemText(IDC_EDIT7,m_Teufe);
if (atof(m_Druck) == 0||atof (m_Temp)== 0|| atof (m_GeoV) == 0 ||atof (m_Teufe) == 0)
{
MessageBox ("Eingabe müssen die Zahle sein! \nBitte Sie noch einmal eingeben! ","Eingabe - Info",MB_ICONEXCLAMATION);
return ; }
如果仅为整数就好办了,此时循环判断即可,但有一点,如果数据太长呢(整数的最大值是4.2G),但又不能仅通过长度判断,因为前面有可能是无用的0,比如20个0和一个1,结果还是1。如果是一个浮点数,那就麻烦大了,需要考虑如下等等式:
1.2
-1.2
+1.2
.3
-.3
1.2e3
1.2e-3
e3
1.2e
等等,几乎都可以考虑用编译原理了!
要是有两个以上的控件关联了值型变量,调用UpdateData将是一个恶梦!
你在对话框编辑控件中可以设定输入浮点数的范围,这个读出来的肯定是数字-----------------------------------------
支持
具体:(vc6)右击edit-->ClassWizard-->member variable
设置成员变量与edit的关联可以理解为绑定 并且可以设置edit接收内容的属性(包括类型和范围等)!
可是怎么将CSTRING转换成字符串呢
还有修改范围好象也行不通,因为读的工作是由GETDLGITEMTEXT来实现的,判断是后话了。
郁闷啊,解决不了啊
你的意思是转换成char*?
隐式转换即可,如果还是不行就这样:
(LPTSTR) (LPCTSTR) CString;
这个怎么用啊,能详细的和我说说吗
Char Daten [] = (LPSTR)(LPCTSRTR)m_Druck ;
是这样吗
赋值:char* pData = (LPSTR)(LPCTSRTR)m_Druck; //m_Druck不能析构
char Data[128];
拷贝:strcpy(Data, m_Druck); //可以析构m_Druck了
char buf[50];
sprintf(buf,"this is test:\n%s",str);
MessageBox(buf);
if (m_Druck[i] < '0' || m_Druck[i] > '9')
break;if (i >= m_Druck.GetLength()) //不全是数字
{
}
因为我提取数据的时候已经规定了类型是CSTRING,所以只有将他转换成字符串后,然后去判断。一个一个判断太麻烦,可以用函数ISDIGIT直接进行判断
CString m_Druck ;
Char str [128];strcpy (str,m_Druck);
BOOL bNumeric = TRUE; for ( int i=0;i < str.GetLength(); i++ )
{
if ( !isdigit( str[i] ) )
{
bNeumeric = FALSE;
}
}