我遇到了一个棘手的问题.
我先从输入栏中将数据提取出来,这时数据是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 ; }
      

解决方案 »

  1.   

    可以先将CString的字符串读出来判断他是不是在'0'-'9'.
      

  2.   

    要判断一个数据是否是一个数字是很困难的,我有一个库,但不能给你。
    如果仅为整数就好办了,此时循环判断即可,但有一点,如果数据太长呢(整数的最大值是4.2G),但又不能仅通过长度判断,因为前面有可能是无用的0,比如20个0和一个1,结果还是1。如果是一个浮点数,那就麻烦大了,需要考虑如下等等式:
    1.2
    -1.2
    +1.2
    .3
    -.3
    1.2e3
    1.2e-3
    e3
    1.2e
    等等,几乎都可以考虑用编译原理了!
      

  3.   

    用范围,就要调用UpdateData,这个函数的设计不得不说非常有问题,是MFC的一个失败。
    要是有两个以上的控件关联了值型变量,调用UpdateData将是一个恶梦!
      

  4.   

    不要这么麻烦
    你在对话框编辑控件中可以设定输入浮点数的范围,这个读出来的肯定是数字-----------------------------------------
    支持
    具体:(vc6)右击edit-->ClassWizard-->member variable
    设置成员变量与edit的关联可以理解为绑定 并且可以设置edit接收内容的属性(包括类型和范围等)!
      

  5.   

    谢谢大家的解答
    可是怎么将CSTRING转换成字符串呢
    还有修改范围好象也行不通,因为读的工作是由GETDLGITEMTEXT来实现的,判断是后话了。
    郁闷啊,解决不了啊
      

  6.   

    将CSTRING转换成字符串
    你的意思是转换成char*?
    隐式转换即可,如果还是不行就这样:
    (LPTSTR) (LPCTSTR) CString;
      

  7.   

    (LPTSTR) (LPCTSTR) CString;
    这个怎么用啊,能详细的和我说说吗
      

  8.   

    你不是要把CString转成字符串吗,上面就是。
      

  9.   

    你的意思是说
    Char Daten [] = (LPSTR)(LPCTSRTR)m_Druck ;
    是这样吗
      

  10.   

    字符串如果要赋值,须保存CString不被析构,最好拷贝出来:
    赋值:char* pData = (LPSTR)(LPCTSRTR)m_Druck; //m_Druck不能析构
    char Data[128];
    拷贝:strcpy(Data, m_Druck); //可以析构m_Druck了
      

  11.   

    CString str="hello word";
    char buf[50];
    sprintf(buf,"this is test:\n%s",str);
    MessageBox(buf);
      

  12.   

    for (int i = 0; i < m_Druck.GetLength(); i++)
        if (m_Druck[i] < '0' || m_Druck[i] > '9')
            break;if (i >= m_Druck.GetLength()) //不全是数字
    {
    }
      

  13.   

    我在一个德国的论坛上找到了这,现在我的问题已经解决了。谢谢大家给我建议。我把他帖出来,希望能帮助和我遇到同样问题的人。
    因为我提取数据的时候已经规定了类型是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; 
     } 
    }