1

C++関数が呼び出す構成ファイルを作成しました。一部のオペレーティングシステムまたはオペレーティングシステム内で設定された言語は、浮動小数点数の読み取り方が異なるため、 ( 4.5& 4,5)のように

実行時にどのオペレーティング システムが実行されているかを確認して、浮動小数点数をコンマまたは小数点で読み取る必要があるかどうかを確認するにはどうすればよいですか。

何か案は?

(私のコードはWindowsとLinux(クロスプラットフォーム)の両方で同じですが、Linuxで浮動小数点数を含む構成ファイルを読み込むと、小数点が正しく読み込まれませんか?)

今後の行方は?

4

3 に答える 3

1

あなたが探している用語はlocaleiostreamメンバー関数imbue()です。imbue ページのサンプル コードは、必要な正確な機能を提供します。

double d;
std::locale mylocale("");
std::cin.imbue(mylocale);
std::cin << d;

変数を正しい形式で読み取ることになります。プラットフォームによっては、環境変数などからロケール名を取得する必要がある場合があります。Linux では、環境変数 LANG から取得されます。窓についてはわかりません。

于 2013-11-06T07:19:37.737 に答える
0

とにかく、異なるプラットフォーム用にプログラムを再コンパイルする必要があるため、コンパイル時の定義を使用するのは簡単です。

#ifdef WIN32
/* Do Windows stuff */
#endif
#ifdef LINUX
/* Do Linux stuff */
#endif

次に、たとえばLinuxでコンパイルするときは、を使用するg++ -DLINUX ...か、ビルドシステムを使用してフラグを渡します。

しかし、この場合、プラットフォームにとらわれない方法でユーザーのロケールを使用して浮動小数点数を読み取ろうとしている場合は、おそらくそのstd::localeようなものを見るのが最善であると思います (たとえそれが本当に恐ろしい IMO であっても)。

于 2013-11-06T07:11:16.140 に答える
0

localeconvなどの関数を使用してstruct lconvを取得できます。これには、ロケール設定に関する多くの情報が含まれており、 clocaleヘッダーからロケール情報を設定するためのsetlocaleが含まれています。このヘッダーへのリンクは次のとおりです: http://en.cppreference.com/w/cpp/locale

于 2013-11-06T07:19:36.673 に答える