验证和转换浮点数

用户名

我正在编写一个程序,其中我必须验证用户输入的值是有效的浮点数。因此,我尝试了这种方法:

string test;
cin >> test;
float n;
n = atof(test.c_str());
cout << n << endl;

但是它似乎并没有完成任务。进行转换时,后面的数字.会丢失。如何验证C ++(不是11)中使用了有效的浮点数?

例子:

INPUT: 32.e
OUTPUT: 32 (should be error)

INPUT: 2a.1234
OUTPUT: 2 (should be error)
迪特玛·库尔(DietmarKühl)

当您结合使用格式化读取和检查是否读取所有内容时,可以确定[complete]值是否为有效的浮点数,例如:

int main()
{
    for (std::string test; std::cin >> test; ) {
        std::istringstream in(test);
        double value;
        if (in >> value >> std::ws && in.eof()) {
            std::cout << "the string '" << test << "' is a valid floating point number\n";
        }
        else {
            std::cout << "the string '" << test << "' is not a valid floating point number\n";
        }
    }
}

该测试不会忽略字符串周围的空格。如果不希望如此,则std::noskipws可以使用机械手,而std::ws可以省略的使用或者,您可以使用strtod()do确定整个值是否代表浮点数。

什么atof()是简单地看看它的参数的初始字符串是有效的浮点数这是你所援引的例子中的情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章