如何从输入c ++中分别读取整数和分数

时间:2012-06-13 17:54:35

标签: c++ floating-point

我的疑问是从输入流中跳过“.”并读取两个不同变量中的整数和小数部分。假设我有一个像10.26这样的输入,我希望将商店10放在一个变量a中,将26放在另一个变量b中。

C中,使用scanf,我会像

一样

scanf("%d.%d",&a,&b);

C++使用cin的等效方式是什么?或者我应该包含cstdio并使用scanf本身?

3 个答案:

答案 0 :(得分:6)

您可以正常阅读浮点数并使用C库的modf函数来拆分数字:

#include <cmath>

float f = 0.0;
float ipart = 0.0;
float fpart = 0.0;

if (cin >> f)
    fpart = modf(f, &ipart);
else {
    // input failed
}

operator>>进行错误检查!

答案 1 :(得分:1)

您仍然可以在C ++中使用scanf。如果您要使用cin,则可以使用ignore跳过输入中的.。像往常一样将整数读入变量:

cin >> a;
cin.ignore(1, '.');
cin >> b;

请注意,无论您使用什么,都会丢失有关小数部分的信息。无论值是.1还是.001,您都会在完成后找到b == 1。但是,它们的价值观非常不同。

答案 2 :(得分:0)

以这种方式:

int egral;
unsigned int frac;
char sep;

if (!(std::cin >> egral >> sep >> frac) || sep != '.')
{
    // error, could not parse number
}

// integral part is 'egral, fractional part in 'frac'

请注意,这会(错误地?)将1.5E2解析为1 + 0.5,而不是150 + 0。您必须添加额外的逻辑来处理科学记数法情况。读取实际的float并使用modf可能更简单。