繁体   English   中英

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

[英]How do I read the whole number and fraction separately from input c++

我的疑问是从输入流中跳过“ . ”并读取两个不同变量中的整数和小数部分。 假设我有一个类似10.26的输入,我想将10存储在一个变量a ,将26在另一个变量b

C ,使用scanf ,我将像

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

在使用cin C++等效的工作方式是什么? 还是应该包括cstdio并使用scanf本身?

您可以照常读取浮点数,并使用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>>进行错误检查!

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

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

请注意,无论使用什么,都会丢失有关小数部分的信息。 无论是.1还是.001 ,完成后都会发现b == 1 但是,它们的价值截然不同。

这是一种方法:

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可能更简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM