В арифметике C ++, включающей тип unsigned
с битами значения n , гарантированно будет по модулю 2 ^ n .Это означает, что любой результат возвращается в диапазон от 0 до 2 ^ n -1, путем сложения или вычитания подходящего кратного 2 ^ n .Это также относится и к C.
Так что вам нужно проверить ввод для знака минус или добавить другую проверку.
Кстати, ваши if
с >>
и &&
оказал некоторое влияние на мой плохой кодометр.Я никогда не могу вспомнить предшествующие операторы для >>
против &&
.Я предполагаю, что если он скомпилирован, то все должно быть в порядке, поскольку >>
не может принимать значение справа.Проверка ... ОК, но я бы использовал скобки, чтобы прояснить это.
Кроме того, в структуре кода было бы неплохо отделить интерактивный ввод от проверки ввода.Например, вы можете использовать любой из этого кода в программе с графическим интерфейсом, с вводом из поля редактирования?Нет, не так, как есть ...
Приветствия & hth.,