我有这个代码,但是当我输入一个超过整数值的值时它会打印垃圾。我实际上有 if 条件来检查范围。如何让它发挥作用?我知道这对你来说很容易。我只是在 C++ 中忘记了一些东西,我没有时间。
#include <iostream>
#include <typeinfo>
#include<cfloat>
#include<climits>
using namespace std;
int g1, g2;
string text = " year";
string text2 = " age";
int main() {
g1 = 2100000000000000000000000;
g2 = 16;
if (g1 < INT_MIN || g1 > INT_MAX) {
std::cout << "Please enter an integer";
} else {
std::cout << g1 << text;
std::cout << g2 << text2;
}
return 0;
}
原文由 Самат Арыстанов 发布,翻译遵循 CC BY-SA 4.0 许可协议
因为 C++ 故意模糊了原始类型(如 — )的最小和最大大小,所以像
int
2100000000000000000000000
的大整数文字很危险地依赖于平台。您的程序甚至可能是格式错误的,因此根本无法编译。幸运的是,检查用户输入与整数文字没有任何关系。前者发生在 运行时,后者是 编译时 方面。
这意味着您的示例代码是一个不切实际的场景。在实际程序中,
g1
的值 不会 是编译时常数,而是用户输入的数字。一个非常好的做法是先让用户将数字输入到
std::string
和std::getline
,然后使用std::stoi
将字符串转换为int
。如果您遵循这种做法,所有错误检查都由标准库执行,您不必使用
INT_MIN
、INT_MAX
或它们的 C++ 对应物std::numeric_limits<int>::min()
和std::numeric_limits<int>::max()
完全没有。例子:
很棒的是,这也将检测到 其他 类型的错误用户输入,例如当用户输入字母而不是数字时。在这段示例代码中扩展错误处理以捕获其他类型的异常作为练习留给读者。