Есть ли способ в C или C ++ проверить, находится ли число, предоставленное пользователем, вне диапазона целочисленного типа?
Например, предположим, что мы используем 16-разрядные целые числа со знаком в диапазоне от -32768 до 32767.
Если пользователь вводит 55555 в программу, оно будет перенесено в отрицательное число, так что если вы используете функцию, которая может принимать любое число, результат будет неверным.
Есть ли способ в C или C ++ определить, находится ли число, предоставленное пользователем, в диапазоне целочисленного типа?
Обновление: я использую числа в простой программе вычитания, которая принимает два числа и вычитает второе из первого.
Если пользователь вводит 55555 в программу, оно будет перенесено в отрицательное число
Не всегда. Это зависит от того, как вы читаете номер. Если вы используете, operator>>
Например, это значение будет не быть завернутым, он будет отклонен.
Есть ли способ в C или C ++ определить, находится ли число, предоставленное пользователем, в диапазоне целочисленного типа?
В C ++ просто используйте operator>>
:
#include <iostream>
int main() {
signed short int i;
std::cin >> i;
if(std::cin)
std::cout << "You entered a valid number!\n";
else
std::cout << "Aw c'mon, play by the rules.\n";
}
Если вы используете что-то вроде strtol
это установит errno
в ERANGE
если происходит переполнение
Есть ли способ в C или C ++, чтобы проверить, является ли число, предоставленное
пользователь находится вне диапазона целочисленного типа?
Это зависит от того, какую функцию вы используете (strtol
может сделать это например). Проверьте документацию.
Единственная разница между int и uint в том, как их интерпретировать. Ваша проблема не имеет решения, если она настолько критична для вас, как переключение на аргумент с плавающей запятой, проверку значения и приведение типов. Обновление: я думал, что вы хотите, чтобы значение аргумента функции проверки во время выполнения было предоставлено другим программистом, а не консольным вводом.