Есть ли простой способ или функция, чтобы проверить, является ли запись в поле ввода числовой, включая числа с плавающей запятой. Любые буквенные или буквенно-цифровые записи не допускаются. Без части числа с плавающей точкой я бы проверил ascii, но я думаю, что она не работает для чисел с плавающей точкой.
Спасибо
Если это диалог, вы можете добавить элемент управления редактирования в диалог. После запуска мастера диалога добавьте переменную в этот элемент управления. Выберите тип float. Подпрограмма DDX_Text сделает все остальное.
Но это позволит вводить буквенные символы. Если вы хотите исправить это тоже. Вы можете создать подкласс управления редактирования с помощью специального обработчика OnChar (WM_CHAR), который допускает только десятичные числа и десятичную точку.
Так как ваш вопрос помечен как mfc
Вот фрагмент кода с использованием CString:
CString ss;
float ff;
GetDlgItemText(IDC_MY_EDIT_BOX, ss);
if (_stscanf_s(ss, _T("%f"), &ff) == 1)
// ff contains the value
else
// error
Если вам нужно использовать число с двойной точностью, используйте "%lf"
в вызове scanf.
РЕДАКТИРОВАТЬ:
CString ss;
float ff;
GetDlgItemText(IDC_MY_EDIT_BOX, ss);
LPCTSTR lpszString = ss;
TCHAR *endptr;
ff = (float) _tcstod(lpszString, &endptr);
if (endptr != lpszString && *endptr == '\0')
// ff contains the value
else
// error