【问题标题】:Check which language is being run on operating system at runtime在运行时检查操作系统上正在运行哪种语言
【发布时间】:2013-11-06 07:04:01
【问题描述】:

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

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

有什么想法吗?

(我的代码在 windows 和 linux(跨平台)上相同,但是当我在 linux 上读取包含浮点数的配置文件时,它没有正确读取小数点?)

前进的方向是什么?

【问题讨论】:

  • 你是如何阅读这些数字的?通常,这将是您使用语言环境处理的事情。
  • 老实说,我只是在解析机器输出时用. 蛮力替换','。解析人工输入是一个更大的项目,人类很少需要输入浮点值。

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


【解决方案1】:

您要查找的术语是localeiostream 成员函数imbue()。 imbue 页面上的示例代码几乎提供了您想要的功能。

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

应该最终以正确的形式读取变量。您可能需要从环境变量或类似变量中获取语言环境名称,具体取决于平台。在 linux 上,它来自环境变量 LANG。我不确定 Windows。

【讨论】:

  • 您不需要从LANG 或任何其他地方获取语言环境名称。使用 "" 作为名称已经意味着运行时应该检索系统默认值。
【解决方案2】:

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

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

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

但我怀疑在这种情况下,如果您尝试以与平台无关的方式使用用户的语言环境读取浮点数,您可能最好查看 std::locale 的东西(即使它是真的很可怕的海事组织)。

【讨论】:

    【解决方案3】:

    您可以使用localeconv等函数来获取struct lconv,其中包含很多关于locale设置的信息 和 setlocaleclocale 标头设置区域信息。这是指向此标头的链接:http://en.cppreference.com/w/cpp/locale

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 2011-03-19
      • 2010-11-02
      • 2017-04-10
      相关资源
      最近更新 更多