验证类似“-2-2”或“ - 22”或“2--2”的CString无效

时间:2015-01-16 12:41:30

标签: c++ visual-c++ mfc

在C ++中,如何验证CString如“-2-2”或“ - 22”或“2--2”不是有效整数。

我尝试了以下代码:

// CString input in the edit box that needs to be verified
   CString input_to_editbox
// verify its a number or not
   if (input_to_editbox.SpanIncluding(L"-0123456789") == input_to_editbox)
   //numeric
   AfxMessageBox(L"it is an integer");
   else
   //Non numeric
   AfxMessageBox(L"Not an integer");

但是我无法验证“-2-2”或“ - 22”或“2--2”是非法和错误的整数。

1 个答案:

答案 0 :(得分:1)

当使用对输入不是很严格的DDX_函数时,我遇到了同样的问题。我用scanf(或更好的_stscanf_s)解决了这个问题。

int nValue;
unsigned charsRead = 0;
const int fieldsRead = _stscanf_s(str, _T("%d%n"), &nValue, &charsRead);
if(fieldsRead == 1  &&  charsRead == _tcslen(str)) {
    // We have read all fields and we have read the complete string,
    // so str contains a valid pattern.
}

如果您想要读取其他类型(例如"%u%n")或多个值(例如"速率为:%d /%d Mbits / s),您可以轻松调整该方法%N&#34)。只是不要忘记比较字段读取正确值。