我正在使用 e57 库 ( http://www.libe57.org/ ) 并且我有一个 e57 数据集,当 Windows 中的小数点设置为 '.' 时,我可以正确读取它们,但在小数点为 ', ',它不能正常工作(例如在语言设置为西类牙或挪威和其他几种欧洲语言的窗口上)。
为了测试我的代码的正确性,我使用了这个库提供的 demoRead 应用程序。
我可以看到,当局部变量设置为小数点为“.”时,应用程序可以读取一个点的数据:
x=0.24965 y=-0.1595 z=-0.29536
但如果我将 Windows 设置中的小数点更改为“,”,则应用程序会读取这些值:
x=24965 y=-15950 z=-29536
由于我不想查看这个大库中的错误,我想知道是否有一种方法可以在代码中为我的应用程序更改局部变量?
我已经尝试使用这段代码来做到这一点:
setlocale(LC_ALL,"en-US");
没有任何成功。有什么方法可以更改影响所有 IO 的代码中的小数点字符,即使它们位于库的深处?
最佳答案
libE57 是一个 C++ 库。因此,相关的标准库组件应该是 <locale>
而不是 <clocale>
.
setlocale()
设置语言环境并影响标准 c 库的许多函数,例如 printf()
, scanf()
和 c 字符串函数。但它对 C++ 库没有直接影响。
c++ 语言环境会影响 c++ 标准库,例如标准流、文件流或字符串流等流。默认情况下,语言环境设置为默认的“C”语言环境。您可以将其更改为 Windows 语言环境:
locale::global(locale("")); // sets locale according to OS environment
您可以将其设置回默认值(使用“.”作为小数点分隔符):
locale::global(locale("C")); // set locale to default locale
但是,这样的更改只会影响创建的新流。已经打开的流,例如 cin 和 cout,将保留打开时设置的语言环境。你当然可以改变:
cout.imbue (myloc); // change locale use by one speciifc stream
//myloc is a locale that was created using default
关于c++ - 在 C++ 代码上更改所有 io 的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27501938/