如何在C++中通过cin输入无穷大值给double类型变量?
解决方法
1. 先修改代码以支持无穷大输入
默认情况下C++标准输入流不会解析inf这类字符串为无穷大值,需要先配置流的格式,开启特殊浮点值(无穷大、NaN)的解析支持。修改后的代码如下:
#include <iostream> #include <limits> #include <locale> int main() { double m = 0.0; // 配置C locale以支持inf/nan的解析 std::cin.imbue(std::locale("C")); // 开启浮点数特殊值解析支持 std::cin.setf(std::ios::scientific); std::cout << "Enter slope value:"; std::cin >> m; // 验证读取结果 if (m == std::numeric_limits<double>::infinity()) { std::cout << "成功读取正无穷大\n"; } else if (m == -std::numeric_limits<double>::infinity()) { std::cout << "成功读取负无穷大\n"; } else { std::cout << "读取的值: " << m << "\n"; } return 0; }
2. 控制台输入的合法值
修改代码后,在控制台输入以下任意值,都能让m存储正无穷大(对应竖直线斜率):
inf+infinfinity+infinity
若需负无穷大,可输入-inf或-infinity。
注意事项
- 不同编译器/标准库的支持略有差异,
inf是最通用的写法; - 不修改流配置的话,输入
inf会被判定为无效输入,std::cin进入失败状态,m会保持初始值(比如你代码里的0)。
内容的提问来源于stack exchange,提问作者Sourav Kannantha B
相关产品推荐
相关产品推荐

