检查运行时在操作系统上运行的语言

时间:2013-11-06 07:04:01

标签: c++ floating-point operating-system

我写了一个C ++函数调用的配置文件。 由于操作系统中设置的某些操作系统或语言以不同方式读取浮点数,因此喜欢(4.5& 4,5

如何在运行时检查以查看正在运行的操作系统,因此我知道是否应该使用逗号或小数点读取浮点数。

有什么想法吗?

(我的代码在windows和linux上都是一样的(跨平台),但是当我在配置文件中读取包含linux上的浮点数时,它不能正确读取小数点吗?)

前进的方向是什么?

3 个答案:

答案 0 :(得分:1)

您要查找的字词是localeiostream成员函数imbue()。 imbue页面上的示例代码提供了您想要的确切功能。

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

应该以正确的形式读取变量。您可能需要从环境变量或类似地方获取区域设置名称,具体取决于平台。在linux上,它来自环境变量LANG。我不确定窗户。

答案 1 :(得分:0)

由于您无论如何都必须为不同的平台重新编译程序,因此使用编译时定义很容易:

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

然后当你在linux上编译时,使用g++ -DLINUX ...,或使用你的构建系统传递标志。

但是我怀疑在这种情况下,如果你试图以平台无关的方式使用用户的语言环境来读取浮点数,你可能最好看一下std::locale的东西(尽管这真是可怕的IMO)。

答案 2 :(得分:0)

您可以使用 localeconv 等功能来获取 struct lconv ,其中包含有关区域设置的大量信息 和 setlocale clocale 标头设置区域设置信息。以下是此标题的链接:http://en.cppreference.com/w/cpp/locale