0

long double ベクトルを持つクラスがあります。

MyClass{
    vector<long double> myvec;
    public:
        MyClass(){ //Constructor }

    // Some memeber functions that operate on the vector
};

入力演算子をオーバーロードし、ユーザーから入力を取得してからベクターにプッシュしました。私が抱えている問題は、ユーザーが double の範囲外の数値を入力した場合、コードは、ユーザーが持っていなくても、入力に長い double 接尾辞を追加する必要があることです。これは私がこれまでに試したことです:

long double input;
...
input = (long double)(input + "L");
myvec.push_back(input);

scanf を使用することを考えましたが、入力演算子をオーバーロードするときに安全に使用できるかどうかはわかりません。

4

2 に答える 2

4

std::stold入力テキストを long double に変換するために使用します。サフィックスは必要ありません。stold正しく行います。接尾辞は、テキストが表す型をコンパイラに伝えるために、ソース コードで必要です。外部ソースから読み取る場合、コンパイラは関与しないため、自分で型を整理する必要があります。

于 2016-11-28T13:59:31.343 に答える
1

接尾辞は、リテラル値のみに使用できます (例: auto x = 12345.0L. 浮動小数点リテラルのデフォルトの型は であるため、これらを使用して暗黙的な変換を防ぎますdouble
名前付き変数では使用できません。
問題は、どのように入力を取得するかです。

于 2016-11-28T14:01:10.173 に答える