在C ++中对std :: get_money和s td :: put_money的困惑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C ++中对std :: get_money和s td :: put_money的困惑相关的知识,希望对你有一定的参考价值。

我对std::get_money头文件中定义的C ++函数<iomanip>感到困惑。根据编程概念,get_money有什么用?

我使用std::get_money有以下代码。

#include <iostream>     // std::cin, std::cout
#include <iomanip>      // std::get_money

int main ()
{
  long double price;
  std::cout << "Please, enter the price: ";
  std::cin >> std::get_money(price);

  if (std::cin.fail()) std::cout << "Error reading price
";
  else std::cout << "The price entered is: " << price << '
';

  return 0;
}

当我输入100.25的输入时,它返回100.输出和货币格式之间的关系是什么?我读了this参考,但无法理解这种关系。 std::put_moneystd::get_timestd::put_time也存在同样的困惑。

它的实际用途有哪些例子?

答案

这是我不知道的标准库的一部分!根据cppreference,您必须设置区域设置以定义应如何格式化时间和金钱。这里我使用的是en_US语言环境。

#include <iomanip>
#include <iostream>

int main() {
  long double price;
  std::cin.imbue(std::locale("en_US.UTF-8"));
  std::cout << "Please enter the price: ";
  std::cin >> std::get_money(price);
  if (std::cin.fail()) {
    std::cout << "Error reading price
";
  } else {
    std::cout << "The price entered is: " << price << '
';
  }
}

不过,这对我来说似乎有点挑剔。该号码必须包含一个至少两位数的.$是可选的。

以上是关于在C ++中对std :: get_money和s td :: put_money的困惑的主要内容,如果未能解决你的问题,请参考以下文章

在C ++中对字符向量进行排序并将大写字母和小写字母视为相同的最佳方法?

为啥我不能在 C++0x 中对 std::shared_ptr 的向量执行 std::copy?

在目标 c 中对负数和正数进行排序

c语言中对较大数字的处理?

6.27-C++手记

在c ++中对向量的向量进行排序