我需要从 std::cin
获取用户输入到一个 double
类型的变量中。这是在复数的上下文中,因此它经常碰巧输入一个数字作为 5i
或 5.4565i
。
考虑 main()
函数中的以下代码:
while (true) {
double c;
std::cin >> c;
std::cout << c << "\n\n";
}
这是发生了什么:
In: 0.45
Out: 0.45
// OK
In: 5 0.45
Out: 5
0.45
// OK
In: 0.45i
Expected out: 0.45
Acutal out: 0
0
0...
我猜这是因为它没有将 0.45i
识别为 double
。那么我如何正确地从 0.45i
中获取值 0.45
,忽略尾随的 i
?
最佳答案
先读一个字符串,再转成double,
$ cat ans.cpp
#include <cstdlib>
#include <iostream>
int main()
{
std::string str;
double dbl;
while (std::cin >> str) {
dbl = std::strtod(str.data(), NULL);
std::cout << dbl << std::endl;
}
}
首先,您将每个以空格分隔的字符串读入str
。 strtod
函数将尝试获取尽可能多的字符以形成 float ,包括十六进制 float 。它返回从字符串的这一部分解析的 double 值。第二个参数可以是一个char *
指针,它指向最后一次解析的字符。如果您不想简单地丢弃尾随字符,这将很有用。如果为空,则忽略。
关于c++ - C++ 中带有尾随字符的数字输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41018113/