0

私の疑問は、入力ストリームから " " をスキップして.、整数と小数部分を 2 つの異なる変数で読み取ることです。10.26 のような入力があるとします。10ある変数a26別の変数に格納したいとしますb

C、 を使用してscanf、次のようにします

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

C++を使用して行う同等の方法は何cinですか? または、それ自体を含めcstdioて使用する必要がありますか?scanf

4

3 に答える 3

6

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>>エラーチェックをしましょう!

于 2012-06-13T18:04:06.573 に答える
2

scanfC++ では引き続き使用できます。を使用する場合は、 を使用して入力をスキップcinできます。通常どおり整数を変数に読み込みます。ignore.

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

何を使用しても、小数部に関する情報が失われることに注意してください。値が.1または.001であるかどうかは、終了時にわかりますb == 1。価値観が全然違うけど。

于 2012-06-13T17:57:34.013 に答える
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

于 2012-06-13T18:01:36.853 に答える