如何检查 stdin 中的数字是否小于给定类型的数字限制
How to check if number from stdin is less than the numeric limit of a given type?
我收到了一个任务,该任务实际上并没有指定我的一个函数应该期望的输入范围(只是,它总是一个正整数(,并且输入是运行时决定的。我可以以某种方式测试我选择的类型是否真的可以容纳它被馈送到的值吗?
说明我希望做什么:
char test;
std::cin >> test;
if(MAGIC)
{
std::cout << "Error." << std::endl;
}
神奇的部分(甚至是前面的行(是我正在寻找的测试。它应该像这样工作:
标准定: 100 -> 无输出
标准: 1000000 -> 错误。
对于大多数数据类型,您可以检查输入流的错误状态,如此处所述。但是,这不适用于其他一些类型,例如帖子中的char
,因为std::cin >> test
会将数据作为单个字符读取,即 '1'
这不是您需要实现的目标。
一种方法是将数字读入std::string
,并将其与通过极限获得的max()
进行比较:
std::string max = std::to_string(std::numeric_limits<char>::max());
std::string s;
std::cin >> s;
bool cmp = (s.size() == max.size()) ? (s <= max) : (s.size() < max.size());
std::cout << s << " " << cmp << std::endl;
演示。
注意:上面的代码假设输入的数据是一个数字,该数字可以任意大,但不得包含数字以外的字符。如果无法做出此假设,请使用此问答中的解决方案来测试输入是否为数字。
我认为答案可能是 https://stackoverflow.com/a/1855465/7071399 知道在哪里获得限制,然后参考 https://stackoverflow.com/a/9574912/7071399 以获取代码的灵感(给定您可以使用长 int 或 char 数组来存储数字,然后检查它是否适合整数值(。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 从小于或等于某个 N 的数字列表中最小化或找到 n 个理想的子集和
- 数字小于机器精度的安全算术?
- 每个元素小于某个特定数字的子数组的总和
- 如何检查 stdin 中的数字是否小于给定类型的数字限制
- 如何定义和使用小于2E-308的数字
- 找到最大.任何给定数字的功率值小于另一个给定数字
- 生成一个小于4位的随机数,但其具有1、2或3位数字的概率相等
- C++用户输入的小于10的数字之和
- 编写一个函数,返回一个堆栈,该堆栈包含所有小于给定数字的元素,并且顺序相同
- 查找向量中小于阈值(复杂度)的所有数字
- 如果差值高于/小于"x",则比较两个数字,做一些事情
- 在小于或等于目标的数组中查找最大的数字
- 为什么一个队列的大小会小于一个小数字
- 在给定N-1个约束的情况下,计算小于整数N的数字的可能排列数
- 我怎么能找到两个小于一个数字的最大幂没有循环