我写了一个C ++函数调用的配置文件。
由于操作系统中设置的某些操作系统或语言以不同方式读取浮点数,因此喜欢(4.5
& 4,5
)
如何在运行时检查以查看正在运行的操作系统,因此我知道是否应该使用逗号或小数点读取浮点数。
有什么想法吗?
(我的代码在windows和linux上都是一样的(跨平台),但是当我在配置文件中读取包含linux上的浮点数时,它不能正确读取小数点吗?)
前进的方向是什么?
答案 0 :(得分:1)
您要查找的字词是locale
和iostream
成员函数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