QUOTE (max_mart @ Nov 22 2011, 13:22)

Здравствуйте.
Помогите, пожалуйста, в данной проблеме?
Здравствуйте!
Необходимо, как говорят, отделить мух от котлет)
Отдельно реализуйте функции ввода с клавиатуры, отдельно складывайте числа в переменную.
Пусть у Вас есть функция readKey(), которая возращает скан-код нажатой клавиши, или, если есть буфер, то позволяет считать последовательность нажатых кнопок.
Допустим, Вы приняли коды 15, 13, 17, 18, которые обозначают цифры 5, 3, 7 и 8. Коды могут быть любыми, зависит от аппаратной реализации клавиатуры. Могут быть и сразу необходимые нам цифры. Однако у клавиши "ВВОД" все равно будет какой-то свой код, например 20.
Как из скан-кодов получить цифры, объяснять не буду. Используется вычитание.
Поскольку, как правило, заранее не известно, сколько разрядов будет в числе, Вы не знаете сколько цифер введет пользователь, прежде, чем нажать "ВВОД". Следовательно, цифры необходимо складывать в буфер.
Затем считаете количество цифр. Так Вы знаете сколько разрядов необходимо. В нашем случае 4 (цифры 5, 3, 7 и 8). Значит максимальное число, введенное пользователем, может быть 9999. Проверяете, входит в 16 разрядов. Да, входит, в независимости от того, знаковая или беззнаковая переменная используется. Если бы не входила - выдали бы ошибку, не задумываясь.
Далее, из буфер выбираете цифры в любом порядке, но с учетом веса. Например 5 - это тысячи, 8 - единицы.
Далее, проходясь циклом по буферу, выбираете цифру, домножаете на "вес" и суммируете результат в переменную, предварительно ее обнулив.
Примерно так (цикл не пишу нарочно, просто по шагам):
uint16_t sum.
sum = 0;
sum +=
5 * 1000;
sum +=
3 * 100;
sum +=
7 * 10;
sum +=
8;
Вроде все. Если ошибся, коллеги поправят