私の疑問は、入力ストリームから " " をスキップして.
、整数と小数部分を 2 つの異なる変数で読み取ることです。10.26 のような入力があるとします。10
ある変数a
と26
別の変数に格納したいとしますb
。
でC
、 を使用してscanf
、次のようにします
scanf("%d.%d",&a,&b);
C++
を使用して行う同等の方法は何cin
ですか? または、それ自体を含めcstdio
て使用する必要がありますか?scanf
私の疑問は、入力ストリームから " " をスキップして.
、整数と小数部分を 2 つの異なる変数で読み取ることです。10.26 のような入力があるとします。10
ある変数a
と26
別の変数に格納したいとしますb
。
でC
、 を使用してscanf
、次のようにします
scanf("%d.%d",&a,&b);
C++
を使用して行う同等の方法は何cin
ですか? または、それ自体を含めcstdio
て使用する必要がありますか?scanf
float を通常どおり読み取り、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>>
エラーチェックをしましょう!
scanf
C++ では引き続き使用できます。を使用する場合は、 を使用して入力をスキップcin
できます。通常どおり整数を変数に読み込みます。ignore
.
cin >> a;
cin.ignore(1, '.');
cin >> b;
何を使用しても、小数部に関する情報が失われることに注意してください。値が.1
または.001
であるかどうかは、終了時にわかりますb == 1
。価値観が全然違うけど。
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
as1 + 0.5
ではなく として解析することに注意してください150 + 0
。科学表記法の状況を処理するには、追加のロジックを追加する必要があります。実際の float を読み取って を使用する方が簡単かもしれませんmodf
。