getline() 不能正确读取重音字符

Lev*_*evy 4 c++ getline non-ascii-characters

我正在尝试使用getline()命令从用户那里获取重音字符,但它没有正确打印它们。

我尝试将一些库包含为locale,但徒劳无功。

这是我的代码:

#include <iostream>
#include <cstdlib>
#include <string>
#include <locale>

using namespace std;

class Pers {
public:
    string name;
    int age;
    string weapon;
};

int main()
{
    setlocale(LC_ALL, "");
    Pers pers;

    cout << "Say the name of your character: ";
    getline(cin, pers.name);
    cout << pers.name;
}
Run Code Online (Sandbox Code Playgroud)

当我输入:Mark Coração 时,我得到的是:

重音字符显示不正确

我如何解决它?

Far*_*nor 5

实际上,问题并非来自getline().

std::cout(分别std::cin)不支持特殊字符。为此,您必须std::wcout(分别std::wcin)使用宽字符(标准字符的大小限制了您可以在 ascii 表中找到的内容)。
您也需要使用更大的字符来存储特殊字符,这就是宽字符的情况。
std::string处理标准字符,std::wstring处理宽字符。

一种方法可以是:

std::wstring a(L"Coração");
std::wcout << a << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

科拉桑


为了使它与getline()

std::wstring a;
getline(std::wcin, a)
std::wcout << a << std::endl;
Run Code Online (Sandbox Code Playgroud)

我希望它能有所帮助。