функция ввода числа с клавиатуры
Добавлено: 30 апр 2009, 21:53
Написать функцию, обеспечивающую ввод с клавиатуры дробного числа. При нажатии клавиши соответствующий символ появляется на экране только в том случаи, если этот символ является допустимым в данной позиции. Например функция не должна допускать ввод более чем одной точки и знака минус не в первой позиции. Функция должна позволять редактировать введенное число при помощи клавиши <BackSpace>. При нажатии клавиши <Enter> функция должна завершать работу и возвращать введенное число. Не могу с ней разобраться... надеюсь кто поможет. Заранее благодарен.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Вот похожий код... может кто все таки поможет.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Код: Выделить всё
#include "stdafx.h"
#include <conio.h>
unsigned getNumber()
{
const int _key_back (0x08);
const int _key_enter (0x0D);
_TCHAR text[16] = _T(""), limit[16];
size_t max_len = _stprintf(limit, _T("%u"), UINT_MAX);
//
int pos = 0;
bool _exit = false;
while (!kbhit() && !_exit)
{
int ch = _gettch();
if (pos == max_len && ch != _key_back && ch != _key_enter)
continue;
//
switch (ch)
{
case _key_enter : // Enter
_exit = true;
break;
case _key_back : // Back
if (pos > 0)
{
text[--pos] = '\0';
_fputts(_T("\b \b"), stdout);
}
break;
default : // Any key
if (_istdigit(ch) > 0)
{
text[pos++] = ch;
text[pos] = '\0';
if ((pos == max_len) && (_tcscmp(text, limit) > 0))
{
text[--pos] = '\0';
} else
{
_fputtc(ch, stdout);
}
}
break;
}
}
//
unsigned result = 0;
_stscanf(text, _T("%u"), &result);
return result;
}
using std::cout;
using std::endl;
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Input: ";
unsigned num = getNumber();
cout << endl;
cout << "Output: " << num << endl;
//
_gettch();
return 0;
}