c++ - C++ 中带有尾随字符的数字输入

标签 c++ double cin

我需要从 std::cin 获取用户输入到一个 double 类型的变量中。这是在复数的上下文中,因此它经常碰巧输入一个数字作为 5i5.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;
    }
}

首先,您将每个以空格分隔的字符串读入strstrtod 函数将尝试获取尽可能多的字符以形成 float ,包括十六进制 float 。它返回从字符串的这一部分解析的 double 值。第二个参数可以是一个char * 指针,它指向最后一次解析的字符。如果您不想简单地丢弃尾随字符,这将很有用。如果为空,则忽略。

关于c++ - C++ 中带有尾随字符的数字输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41018113/

相关文章:

c++ - 将指向成员的指针强制转换为大多数派生类型

c++ - 运行时检查失败 #2 - 变量 '' z 周围的堆栈已损坏

java - JTextField 只显示 2 位小数

c++ - 使用 getline(cin,n) 输入;没有打印第一个输入,我也没有使用 cin>> 在任何地方输入

c++ - 了解 cin.fail() 和 cin.clear - vector 附加程序

c++ - 如何删除用户输入字符串末尾的空字符?

c++ - 声明一个 NaN 的 cv::Mat

c++ - 这个 C++ 语法到底叫什么?

android - 与语言环境无关的字符串加倍

c++ - 比较 (int)double 和 (int)int 时出现异常