【发布时间】:2020-12-21 19:12:58
【问题描述】:
在了解有关标准库的更多信息时,我遇到了 put_money。 我的代码:
std::cout.imbue(std::locale("en_US.UTF-8"));
std::cout << std::left << std::showbase << std::setfill('*')
<< "flt: " << std::setw(15) << -9.87 << '\n'
<< "hex: " << std::setw(15) << 41 << '\n'
<< " $: " << std::setw(15) << std::put_money(367, false) << '\n'
<< "usd: " << std::setw(15) << std::put_money(367, true) << '\n'
<< "usd: " << std::setw(15)
<< std::setfill(' ') << std::put_money(367, false) << '\n';
但在编译此代码时,我收到一条错误消息:
C:\Users\tbhar\Documents\C++ codes>cd "c:\Users\tbhar\Documents\C++ codes\" && g++ codetester.cpp -Wall -Wextra -o codetester && "c:\Users\tbhar\Documents\C++ codes\"codetester
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
使用以下功能时发生类似错误:
std::put_money、std::get_time 和 std::put_time。
我不知道为什么会收到此错误。
【问题讨论】:
-
你说这是编译错误,但看起来像是运行时错误。请澄清,并指出错误发生在哪一行。
-
该错误似乎暗示您指定的语言环境不存在,或者至少 C++ 程序无法访问。我建议首先尝试使用已知存在的语言环境(C++ 标准要求的唯一语言环境称为
"C"),然后研究系统上存在哪种语言环境。 -
如果您使用的是 MS Windows:https://stackoverflow.com/questions/27614666/print-all-stdlocale-names-windows/27615711#27615711 如果您没有在终端上输入
locale -a,可能会告诉您。 -
@Tushar 请在此处输入minimal reproducible example 以重现问题into your quesiton。因为我们无法真正帮助诊断问题的真正根源。