私の疑問は、入力ストリームから " " をスキップして.、整数と小数部分を 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>>エラーチェックをしましょう!
scanfC++ では引き続き使用できます。を使用する場合は、 を使用して入力をスキップ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.5E2as1 + 0.5ではなく として解析することに注意してください150 + 0。科学表記法の状況を処理するには、追加のロジックを追加する必要があります。実際の float を読み取って を使用する方が簡単かもしれませんmodf。